Twitter zapewnia dwa różne rodzaje dostępu do swojego interfejsu API. Pierwszy jest nieuwierzytelniony, co pozwala na 150 żądań na godzinę przed odcięciem. Alternatywnie, uwierzytelnione połączenia OAuth do API są ograniczone do 350 na godzinę. Ograniczenie do 150 wywołań API na godzinę to zdecydowanie za mało, aby zeskrobać potrzebne nam dane w rozsądnym czasie. Drugi limit 350 to również za mało, a ponadto nie jesteśmy zainteresowani budowaniem aplikacji Twittera, która wymaga uwierzytelnienia. Chcemy szybko uzyskać dane, aby zbudować sieci, abyśmy mogli zacząć hakować dane. Jeśli nie znasz interfejsów API RESTful lub nigdy nie słyszałeś o OAuth, nie martw się. Na potrzeby tego ćwiczenia nie będziemy się martwić o te szczegóły. Jeśli chcesz dowiedzieć się więcej na temat któregokolwiek z nich, zalecamy zapoznanie się z dokumentacją konkretnej usługi, do której próbujesz uzyskać dostęp. Niestety nie będziemy w stanie tego zrobić, jeśli użyjemy interfejsu API udostępnionego przez Twittera. Aby uzyskać potrzebne nam dane, będziemy musieli skorzystać z innego źródła danych z wykresów społecznościowych na Twitterze: Google SocialGraph API (zwanego także SGA). Google wprowadził SGA w 2008 roku z zamiarem stworzenia jednej tożsamości online używanej we wszystkich serwisach społecznościowych. Na przykład możesz mieć konta z kilkoma usługami online które rozstrzygają się na jeden adres e-mail. Ideą SGA jest wykorzystanie tego jednego bitu informacji do zestawienia całego wykresu społecznościowego w wielu usługach. Jeśli jesteś ciekawy, jak długi jest Twój cyfrowy ślad w Google, wpisz następujące polecenie w swojej ulubionej przeglądarce:
https://socialgraph.googleapis.com/lookup?q=@EMAIL_ADDRESS&fme=1&pretty=1
Jeśli zastąpisz adres EMAIL_ADDRESS odpowiednim adresem, interfejs API zwróci nieprzetworzony kod JSON do okna przeglądarki, które możesz zbadać, aby zobaczyć, ile części Twojego wykresu społecznościowego Google już przechowuje! Jeśli masz konto w serwisie Twitter zarejestrowane na podany adres e-mail, prawdopodobnie zauważysz również, że adres URL Twojej strony na Twitterze jest wyświetlany jako jedna z usług wykresów społecznościowych, która rozwiązuje ten adres e-mail. Twitter jest jednym z wielu serwisów społecznościowych, które SGA indeksuje w celu przechowywania danych publicznych wykresów społecznościowych. Dlatego możemy użyć SGA, aby wysłać zapytanie do sieci społecznościowej określonego użytkownika, a następnie zbudować sieć. Podstawową zaletą korzystania z SGA jest to, że w przeciwieństwie do drobnych zapytań godzinowych, które zapewnia Twitter, SGA pozwala na 50 000 zapytań dziennie. Nawet w skali Twittera będzie to więcej niż wystarczająca liczba zapytań, aby zbudować wykres społecznościowy dla zdecydowanej większości użytkowników. Oczywiście, jeśli jesteś Ashton Kutcher lub Tim O’Reilly, metoda opisana w tym studium przypadku nie będzie działać. To powiedziawszy, jeśli jesteś gwiazdą i nadal chcesz śledzić to ćwiczenie, możesz użyć jednej z użytkowników na Twitterze:
@johnmyleswhite lub @drewconway.
https://socialgraph.googleapis.com/lookup?q=http://twitter.com/drewconway & edo = 1 & edi = 1 & pretty = 1
Na przykład użyjmy strony Twittera Drew, aby zbadać, w jaki sposób SGA porządkuje dane. Wpisz poprzednie zapytanie API w wybranej przeglądarce internetowej. Jeśli chcesz, możesz zapytać SGA o własną nazwę użytkownika na Twitterze. Tak jak poprzednio, SGA zwróci surowy JSON opisujący relacje Drew na Twitterze. Z samego zapytania API widzimy trzy ważne parametry: edo, edi i pretty. Ładny parametr jest użyteczny tylko w tym widoku przeglądarki, ponieważ zwraca sformatowany JSON. Kiedy analizujemy ten JSON w sieci, upuszczamy ten parametr. edi i edo odpowiadają jednak kierunkom relacji na Twitterze. Parametr edo oznacza „przewyższa”, tj. Znajomych na Twitterze, a edi oznacza „przewija”, czyli obserwujących na Twitterze. W przykładzie 1 widzimy skróconą wersję sformatowanego surowego JSON zwróconego dla @drewconway. Obiekt JSON, który najbardziej nas interesuje, to węzły. Zawiera pewne opisowe informacje o użytkowniku Twittera, ale co ważniejsze, relacje przychodzące i wychodzące. Obiekt nodes_referenced zawiera wszystkich znajomych z Twittera dla pytanego węzła. Są to inni użytkownicy, których śledzi węzeł (out-stopień). Podobnie obiekt nodes_referenced_by zawiera użytkowników Twittera śledzących żądany węzeł (w stopniu).
Przykład . Struktura danych Google SocialGraph w surowym JSON
{
“canonical_mapping”: {
“http://twitter.com/drewconway”: “http://twitter.com/drewconway”
},
“nodes”: {
“http://twitter.com/drewconway”: {
“attributes”: {
“exists”: “1”,
“bio”: “Hopeful academic, data nerd, average hacker, student of conflict.”,
“profile”: “http://twitter.com/drewconway”,
“rss”: “http://twitter.com/statuses/user_timeline/drewconway.rss”,
“atom”: “http://twitter.com/statuses/user_timeline/drewconway.atom”,
“url”: “http://twitter.com/drewconway”
},
“nodes_referenced”: {
…
},
“nodes_referenced_by”: {
…
}
}
}
Przeszukiwacz SGA po prostu skanuje Twitter w poszukiwaniu publicznych łączy między użytkownikami i przechowuje relacje w swojej bazie danych. Prywatne konta na Twitterze są zatem nieobecne w danych. Jeśli analizujesz własne dane SGA, możesz zauważyć, że nie odzwierciedlają one twoich bieżących relacji na Twitterze. W szczególności obiekt nodes_referenced może zawierać użytkowników, których już nie obserwujesz. Wynika to z faktu, że SGA tylko okresowo indeksuje aktywne linki, więc dane w pamięci podręcznej nie zawsze odzwierciedlają najbardziej aktualne dane.
Oczywiście nie chcemy współpracować z SGA przez przeglądarkę. Ten interfejs API ma być dostępny programowo, a zwracany JSON musi zostać przeanalizowany w obiekt wykresu, abyśmy mogli budować i analizować te sieci na Twitterze. Aby zbudować te obiekty wykresów, naszą strategią będzie wykorzystanie jednego użytkownika Twittera jako źródła (przywołaj numer Erdősa) i zbudowanie sieci z tego źródła. Użyjemy metody zwanej próbkowaniem kuli śnieżnej, która rozpoczyna się od pojedynczego nasiona, a następnie znajduje wszystkie połączenia wejściowe i wyjściowe z tym nasionem. Następnie użyjemy tych połączeń jako nowych nasion i powtórzymy proces dla ustalonej liczby rund. W tym studium przypadku wykonamy tylko dwie rundy próbkowania, co robimy z dwóch powodów. Po pierwsze, jesteśmy zainteresowani mapowaniem i analizowaniem sieci lokalnej użytkownika-nasion ,strukturę, która zawiera zalecenia dotyczące tego, za kim powinien postępować użytkownik seedujący. Po drugie, ze względu na skalę wykresu społecznościowego na Twitterze, możemy szybko przekroczyć limit prędkości SGA i pojemność naszego dysku twardego, jeśli użyjemy więcej rund. Mając to na uwadze, w następnej sekcji zaczynamy od opracowania podstawowych funkcji do pracy z SGA i analizy danych