Jak získat 100 milionů údajů o uživatelích Facebooku

Nabídnu malý pohled na to, jak funguje Facebook Graph API a jak se vlastně Ron Bowes snadno dostal k 100 milionům jmen, příjmení, adres profilů a Facebook ID. Uvidíte, že je to extrémně snadné. A nabídnu pár dalších zajímavých triků – jak získat seznam vlastních přátel či seznam členů skupiny a těch co lajkují nějakou stránku. Může se to hodit

Údaje 100 milionů uživatelů Facebooku volně k dispozici vyvolala velký zájem, včetně několika jedinců, kteří stále nechápou, jak to vlastně s těmi údaji je – místo toho aby se podívali na Open Graph API se věnují sprostým mailům. Což se ale na Open Graph API podívat teď společně?

Tak co třeba http://graph.facebook.com/Daniel.Docekal?

{
   "id": "570949930",
   "name": "Daniel Bradbury Dou010dekal",
   "first_name": "Daniel",
   "middle_name": "Bradbury",
   "last_name": "Dou010dekal",
   "link": "http://www.facebook.com/Daniel.Docekal",
   "gender": "male",
   "locale": "en_US"
}

Ach ano, přesně tady to máme. Máme tu adresu profilu na Facebooku, jméno, příjmení, prostřední jméno, pohlaví, ID na Facebooku. A taky to, že nesnáším Facebook v češtině a používám ho v angličtině. A tentýž výsledek samozřejmě dostanete, pokud použijete mé ID – tedyhttp://graph.facebook.com/570949930

A co se s numerickým ID dá udělat? No pochopitelně, dá se “inkrementovat”. Takže na http://graph.facebook.com/570949933 najdete dalšího existujícího uživatele v pořadí, na http://graph.facebook.com/570949940 dalšího. A můžete pokračovat. Hodně dlouho pokračovat.

User Feed co by neměl být veřejný

Co dál se dá hezkého zjistit, aniž byste se museli nějak moc namáhat?

Co třeba http://graph.facebook.com/Daniel.Docekal/feed – ideální, najdete tam kompletní přehled všech statusů a odkazů, prostě zeď uživatele. S ohledem na to, že Facebook vzbuzuje představu, že vaše statusy nejsou zcela veřejné, může tohle být docela překvapení. A pochopitelně tam najdete i všechny reakce na vaše příspěvky – čímž snadno můžete začít shromažďovat další jména/příjmení a uživatelská ID.

Ve skutečnost je viditelnost mého “feed” vpořádku – nastavil jsem to tak v nastavení soukromí (zde) – Facebook opravdu respektuje, jakým způsobem si nastavíte tuhle “jednoduchou” tabulku. A pokud si nastavíte vše do “Everyone” polohy, tak se samozřejmě nedivte ničemu.

Ne, přátelé ti (bezprostředně) veřejní nejsou, ale co dalšího je?

http://graph.facebook.com/Daniel.Docekal/friends vypadá také lákavě, přátelé Facebook uživatele – tady už narazíte. Musíte se autentikovat přes OAuth. Což na druhou stranu není nijak složité – můžete si to schválně vyzkoušet.

Kompletní dokumentaci k tomu, co je přístupné v rámci user objektu najdete tady. a dozvíte se tam něco zajímavého, že můžete použít fields pro určení toho, co vlastně chcete vědět. Ne vše bude přístupné, Facebook tady vcelku respektuje to, co si nastavíte v rámci viditelnost. Ale dozvíte se tady taky jaké další connections parametry můžete použít.

V praxi to znamená, že si můžete zkusit napsat skript, který pomocí inkrementace ID bude vybírat https://graph.facebook.com/_ID_/?fields=birthday – a buďte si jistí, že se k datům narození dostanete. Tedy pokud je daný uživatel nastavil jako veřejné.

Zajímavé může být i https://graph.facebook.com/_ID_/likes – přehled toho, co uživatel označil jako Líbí/Like – a dostanete se k seznamu Pages, kde je uživatel lajka (fanoušek).

Co třeba http://graph.facebook.com/Daniel.Docekal/picture – hned zjistíte jaký má uživatel profilový obrázek (ano, to je další veřejná informace na Facebooku).

Tak co s tím OAuth a Access Token?

Co třeba http://app.apigee.com/console/facebook – užitečná služba pro testování podobných věcí.

Pak už stačí jenom https://graph.facebook.com/Daniel.Docekal/friends (a zvolit OAuth autentikaci). Užitečné, dá se tak získat vlastní přehled “přátel”. Na “cizí” přátele to totiž nefunguje – Can’t lookup all friends of 1185277881; can only lookup for the logged in user (570949930) or for pairs of users

Takže ani tudy cesta k seznamu přátel nevede, aspoň něco je na tom Facebooku jisté.

A co Facebook Pages?

Nezapomeňte, Facebook Page (stránka) je veřejně přístupný objekt. Takže například https://graph.facebook.com/pooh.cz vede k základním údajům o POOH.CZ Facebook Page (což je samozřejmě totéž jako https://graph.facebook.com/73853464545 – i zde fungují ID, jsou totiž společná pro jakékoliv objekty).

Pak už snadno zjistíte, že https://graph.facebook.com/73853464545/feed může být extrémně užitečné, pokud chcete dostávat ze své Page data někam jinam – geniální export. Ale při bližším pohledu i zde najdete komentáře – takže je možné snadno dolovat další data o uživatelích.

Přes ně se pak můžete dostat k jejich údajům – jeden příklad za všechny (Marek Fiala nechť promine, ale toto jsou veřejně dostupné údaje a Marek by možná mohl svůj účet nastavit lépe). Respektive, jsou veřejné pro kohokoliv přihlášeného k Facebooku (Marek Fiala není v mých přátelích):

{
   "id" : 1425322613,
   "name" : "Marek Fiala",
   "first_name" : "Marek",
   "last_name" : "Fiala",
   "link" : http://www.facebook.com/profile.php?id=1425322613,
   "birthday" : "04/07/1985",
   "hometown": {
    "id" : 103072199732335,
    "name" : "Polná"
    },
   "work": [
    {
     "employer": {
      "id" : 114252701922688,
      "name" : "Superhosting"
      },
     "location": {
      "id" : 108210209207966,
      "name" : "Prague"
      },
     "position": {
      "id" : 114977041850318,
      "name" : "Programator"
      },
     "start_date" : "0000-00"
     }
   ],
   "education": [
    {
     "school": {
      "id" : 110610612299901,
      "name" : "ČVUT FEL"
      },
     "year": {
      "id" : 111149032238763,
      "name" : "2009"
      },
     "concentration": [
      {
       "id" : 106712489365591,
       "name" : "Výpočetní technika"
       }
     ]
     },
{
     "school": {
      "id" : 106422206061441,
      "name" : "SPŠ Jihlava"
      },
     "year": {
      "id" : 108364149197254,
      "name" : "2004"
      }
     }
   ],
   "gender" : "male",
   "locale" : "en_US",
   "updated_time" : "2009-05-18T20:55:12+0000"
   }

Uplně stejně se dá dostat k obsahu Group/Skupiny – stačí znáte její číslo – https://graph.facebook.com/188175849611/feed vede na “Windows 7 Tips and Tricks (POOH.CZ)” – s jedním rozdílem, budete potřebovat OAuth autentikaci. Daleko zajímavější ale budehttps://graph.facebook.com/188175849611/members – jistě chápete, že přístup k seznamu členů Skupiny je … no prostě fajn.

https://graph.facebook.com/73853464545/members potom, vcelku očekávatelně umožňuje získat seznam členů Page/Stránky (OAuth požadováno). Ale pokud byste si třeba dělali iluzi, že je nutné být fanouškem, tak to opravdu není. https://graph.facebook.com/MediaTimes.cz/members ochotně poskytne seznam členů (Facebook jméno, Facebook ID), aniž bych byl fanouškem.

Vyhledávání v Open Graph

S pomocí https://graph.facebook.com/search?q=QUERY&type=OBJECT_TYPE můžete objekty v Open Graph databázi proheldávat, OBJECT_TYPE je post, user, page, event či group. Nenabízí se sice wildcards podpora, ale přesto jde o velmi užitečnou pomůcku.

Co je ale například zajímavé, že https://graph.facebook.com/search?q=Dočekal&type=user vrací spoustu výsledků, které vypadají jako nijak nesouvisející s “Dočekal” – po bližším zkoumání zjisíte, že ačkoliv hledáte ve jméně, vyhledávají se i některá další políčka (například přezdívka).

Vyhledávání je užitečné i v podobě hledání ve všech veřejných statusech – například https://graph.facebook.com/search?q=facebook&type=post, aby bylo jasno, jak to vlastně vypadá. Opět zde můžete najít dostatek jmen a ID uživatelů, kteří na takovéto statusy reagovali.

Užitečná pomůcka

Jakub Pajer mi dal další tip na hodně užitečnou pomůcku – na http://zesty.ca/facebook najdete velmi užitečný “browser” v Open Graph objektech.