Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00028 003497 12920953 na godz. na dobę w sumie
Facebook Graph API. Tworzenie rozbudowanych rozwiązań we Flashu - książka
Facebook Graph API. Tworzenie rozbudowanych rozwiązań we Flashu - książka
Autor: Liczba stron: 288
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-246-3381-4 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> biznes it >> social media
Porównaj ceny (książka, ebook (-25%), audiobook).

Graph API - Lubię to!

Ponad 500 milionów użytkowników, spędzających 700 000 000 000 minut miesięcznie na jednej witrynie. O czym mowa? O serwisie Facebook! Jego potencjał doceniła niejedna firma. Zastanawiasz się, jak dołączyć do tego grona? Jak zdobyć popularność, fanów i być może zarobić? Uwierz, że to nic trudnego! Facebook udostępnia bogate API, dzięki któremu bez problemu zintegrujesz się z witryną facebook.com.

W tej książce wiedza jest na wyciągnięcie ręki. W trakcie lektury nauczysz się korzystać z dostarczonych funkcji przy użyciu ActionScript 3 SDK for Facebook Platform. Dowiesz się, jak zarejestrować swoją aplikację, uwierzytelniać użytkowników oraz żądać uprawnień rozszerzonych. Ponadto zobaczysz, jak korzystać z wyszukiwarki, wykrywać błędy oraz publikować wiadomości na tym portalu społecznościowym. Książka ta jest idealną pozycją dla każdego fana Facebooka posiadającego zacięcie programistyczne. Sprawdzi się także doskonale w rękach profesjonalistów chcących stworzyć nowe narzędzia lub gry dla portalu Facebook. Polub to!

Dotrzyj do milionów użytkowników serwisu Facebook!

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Facebook Graph API. Tworzenie rozbudowanych rozwiązań we Flashu Autor: Michael James Williams Tłumaczenie: Łukasz Schmidt ISBN: 978-83-246-3381-4 Tytuł oryginału: Facebook Graph API Development with Flash Format: 170×230, stron: 288 Graph API – Lubię to! • Jak wykorzystać potencjał 500 milionów użytkowników? • Jak zarejestrować własną aplikację na Facebooku? • Jakie możliwości kryje ActionScript 3SDK for Facebook Platform? Ponad 500 milionów użytkowników, spędzających 700 000 000 000 minut miesięcznie na jednej witrynie. O czym mowa? O serwisie Facebook! Jego potencjał doceniła niejedna firma. Zastanawiasz się, jak dołączyć do tego grona? Jak zdobyć popularność, fanów i być może zarobić? Uwierz, że to nic trudnego! Facebook udostępnia bogate API, dzięki któremu bez problemu zintegrujesz się z witryną facebook.com. W tej książce wiedza jest na wyciągnięcie ręki. W trakcie lektury nauczysz się korzystać z dostarczonych funkcji przy użyciu ActionScript 3 SDK for Facebook Platform. Dowiesz się, jak zarejestrować swoją aplikację, uwierzytelniać użytkowników oraz żądać uprawnień rozszerzonych. Ponadto zobaczysz, jak korzystać z wyszukiwarki, wykrywać błędy oraz publikować wiadomości na tym portalu społecznościowym. Książka ta jest idealną pozycją dla każdego fana Facebooka posiadającego zacięcie programistyczne. Sprawdzi się także doskonale w rękach profesjonalistów chcących stworzyć nowe narzędzia lub gry dla portalu Facebook. Polub to! • Zalety i wady Facebooka • Wybór hostingu WWW • Dostęp do Graph API poprzez przeglądarkę • Pobieranie informacji ze strony za pomocą ActionScript 3 • Rejestracja aplikacji na Facebooku • Uwierzytelnianie za pomocą ActionScript 3 • Uzyskiwanie rozszerzonych uprawnień • Pobieranie i stronicowanie wyników • Wykorzystanie wyszukiwarki • Pisanie w feedzie użytkownika • Publikowanie sformatowanych postów • Dodawanie i usuwanie oznaczenia „Lubię to!” • Obsługa notatek i wydarzeń • Tworzenie stron, grup, aplikacji i wideo • Język FQL Dotrzyj do milionów użytkowników serwisu Facebook! Idź do • Spis treści • Przykładowy rozdział • Skorowidz Katalog książek • Katalog online • Zamów drukowany katalog Twój koszyk • Dodaj do koszyka Cennik i informacje • Zamów informacje o nowościach • Zamów cennik Czytelnia • Fragmenty książek online Kontakt Helion SA ul. Kościuszki 1c 44-100 Gliwice tel. 32 230 98 63 e-mail: helion@helion.pl © Helion 1991–2011 Spis treĂci O autorze O recenzencie WstÚp Rozdziaï 1. Wprowadzenie Dlaczego Facebook jest taki dobry? Facebook jest popularny Liczby Facebook jest wszÚdzie Programowanie dla Facebooka jest ciekawe Hosting WWW Co to jest host WWW? Dlaczego potrzebny jest host WWW? Jak wybraÊ host? Przydatne oprogramowanie A co z nazwami domen? Jaka znajomoĂÊ AS3 jest wymagana? Kod ěródïowy NapÚdzany przez… Wykrywanie bïÚdów Uwaĝaj na przechowywanie w pamiÚci podrÚcznej Uwaga koñcowa Rozdziaï 2. Witaj w Graphie DostÚp do Graph API poprzez przeglÈdarkÚ Czas zaczÈÊ dziaïaÊ — ïadowanie strony Korzystanie z Graph API za pomocÈ AS3 Czas zaczÈÊ dziaïaÊ — pobieranie informacji ze strony za pomocÈ AS3 9 11 13 17 17 18 19 19 21 21 21 22 22 23 23 24 25 27 27 28 30 31 31 32 34 35 Spis treĞci Czas zaczÈÊ dziaïaÊ — deserializowanie obiektu JSON Czas zaczÈÊ dziaïaÊ — wizualizowanie informacji PoïÈczenia Czas zaczÈÊ dziaïaÊ — wyszukiwanie poïÈczeñ w przeglÈdarce Renderowanie list Czas zaczÈÊ dziaïaÊ — renderowanie list postów Renderowanie poïÈczeñ Czas zaczÈÊ dziaïaÊ — wyĂwietlanie poïÈczeñ obiektu Graph Obiekty ĝÈdajÈce Czas zaczÈÊ dziaïaÊ — tworzenie obiektu ĝÈdajÈcego HTTP PoïÈczenia poïÈczeñ Czas zaczÈÊ dziaïaÊ — ïadowanie zdjÚÊ z albumu Wszystko razem Czas zaczÈÊ dziaïaÊ — przemieszczanie siÚ w Graph Podsumowanie Rozdziaï 3. WpuĂÊ mnie! Co moĝna zobaczyÊ? Czas zaczÈÊ dziaïaÊ — rozglÈdanie siÚ po kontach innych ludzi Co to ma wspólnego z Graph API? Tokeny dostÚpu sÈ dowodem autoryzacji Autoryzacja uĝytkownika i aplikacji Czas zaczÈÊ dziaïaÊ — rejestracja aplikacji na Facebooku ID aplikacji + zalogowany uĝytkownik = token dostÚpu Czas zaczÈÊ dziaïaÊ — ĝÈdanie tokenu dostÚpu przy uĝyciu przeglÈdarki Rejestrowanie URI przekierowania dla naszej aplikacji Uĝywanie tokenu dostÚpu Ja, ja, ja Zachowanie tajemnicy Co daï nam Facebook? Uwierzytelnianie za pomocÈ AS3 Czas zaczÈÊ dziaïaÊ — uĝywanie tokenu dostÚpu w aplikacji Visualizer To oszustwo! Czas zaczÈÊ dziaïaÊ — uwierzytelnianie w aplikacji Inne podejĂcie Czas zaczÈÊ dziaïaÊ — uwierzytelnianie za pomocÈ JavaScriptu Tworzenie strony zwrotnej Odbieranie tokenu dostÚpu Co z uĝytkownikami, którzy nie uĝywali wczeĂniej tej aplikacji? Uprawnienia rozszerzone Czas zaczÈÊ dziaïaÊ — uzyskiwanie uprawnieñ rozszerzonych Czas zaczÈÊ dziaïaÊ — ĝÈdanie uprawnieñ rozszerzonych ChcÚ wszystkiego i chcÚ tego teraz Korzystanie z Adobe ActionScript 3 SDK for Facebook Platform Czas zaczÈÊ dziaïaÊ — implementacja SDK Podsumowanie 4 38 40 42 42 46 46 50 51 53 53 59 60 65 65 67 69 69 70 73 74 74 75 78 78 78 81 83 83 84 85 85 90 90 92 92 94 96 99 101 101 102 105 106 106 114 Spis treĞci Rozdziaï 4. Dalej w Graph Pobieranie wiÚkszej liczby wyników ze stronicowaniem Czas zaczÈÊ dziaïaÊ — wyĂwietlanie liczby obiektów na liĂcie Czas zaczÈÊ dziaïaÊ — ĝÈdanie wiÚkszej liczby obiektów Czas zaczÈÊ dziaïaÊ — ĝÈdanie jeszcze wiÚkszej liczby obiektów Stronicowanie Czas zaczÈÊ dziaïaÊ — uzyskiwanie danych podzielonych na strony Czas zaczÈÊ dziaïaÊ — dodawanie parametrów limit i offset do instancji GraphRequest Czas zaczÈÊ dziaïaÊ — ĝÈdanie danych na podstawie daty Czas zaczÈÊ dziaïaÊ — dodawanie parametrów since i until do instancji GraphRequest Czas zaczÈÊ dziaïaÊ — filtrowanie wedïug daty za pomocÈ UI Partycjonowanie z okazji Twoich urodzin Czas zaczÈÊ dziaïaÊ — uĝywanie parametru ids w Graph URL Podsumowanie Rozdziaï 5. Wyszukaj mnie Uĝywanie funkcji Search (szukaj) na stronie gïównej Czas zaczÈÊ dziaïaÊ — badanie wyników szybkiego wyszukiwania Czas zaczÈÊ dziaïaÊ — korzystanie z peïnego wyszukiwania Wyszukiwanie za pomocÈ Graph API Czas zaczÈÊ dziaïaÊ — wyszukiwanie bez autoryzacji Czas zaczÈÊ dziaïaÊ — wyszukiwanie po dokonaniu autoryzacji Róĝnice Ograniczenia Czas zaczÈÊ dziaïaÊ — implementowanie okna Search (szukaj) w projekcie Visualizer Czas zaczÈÊ dziaïaÊ — wyszukiwanie za pomocÈ SDK Czas zaczÈÊ dziaïaÊ — wyszukiwanie w Twoich aktualnoĂciach Czas zaczÈÊ dziaïaÊ — wyszukiwanie wĂród postów na tablicy znajomego Czas zaczÈÊ dziaïaÊ — przeszukiwanie aktualnoĂci za pomocÈ aplikacji Visualizer Podsumowanie Rozdziaï 6. Dodawanie do Graphu Witaj, Facebooku! Czas zaczÈÊ dziaïaÊ — publikowanie na tablicy uĝytkownika Metody ĝÈdañ Co to jest metoda ĝÈdania? Czas zaczÈÊ dziaïaÊ — uĝywanie metody POST Czas zaczÈÊ dziaïaÊ — wykrywanie bïÚdów Czas zaczÈÊ dziaïaÊ — przyznawanie potrzebnych uprawnieñ Czas zaczÈÊ dziaïaÊ — publikowanie posta za pomocÈ SDK Dalsza praca z postami na tablicy Czas zaczÈÊ dziaïaÊ — publikowanie postów sformatowanych Pisanie na innych tablicach Czas zaczÈÊ dziaïaÊ — pisanie za pomocÈ aplikacji Visualizer na innej tablicy Parametry actions, privacy i source Parametr actions 117 117 118 121 123 124 125 127 129 131 133 136 139 141 143 143 144 146 149 149 153 156 156 158 162 165 167 169 174 177 177 178 181 181 182 184 186 188 190 191 196 197 198 198 5 Spis treĞci Czas zaczÈÊ dziaïaÊ — dodawanie operacji za pomocÈ parametru actions Parametr privacy Czas zaczÈÊ dziaïaÊ — modyfikowanie ustawieñ prywatnoĂci posta Parametr source Usuwanie obiektów Graph Czas zaczÈÊ dziaïaÊ — usuwanie posta Czas zaczÈÊ dziaïaÊ — usuwanie postów za pomocÈ aplikacji Visualizer Publikowanie innych obiektów Graph Komentarze Oznaczenie „LubiÚ to!” Usuwanie oznaczeñ „LubiÚ to!” Notatki Wydarzenia RSVP wydarzeñ Albumy ZdjÚcia Zameldowania A co z…? Wysyïanie wiadomoĂci do skrzynki Tworzenie stron, grup, aplikacji i wideo Modyfikowanie informacji biograficznych Tworzenie znajomych Zapraszanie znajomych na wydarzenia Podsumowanie Rozdziaï 7. FQL ma znaczenie! Co to jest FQL? Interfejs FQL Modele danych Reprezentacje danych Pobieranie informacji Czas zaczÈÊ dziaïaÊ — pobieranie informacji z tabeli page Co z poïÈczeniami? ZdjÚcia, albumy i ich wïaĂciciele Klucze podstawowe Kurze ïapki Tabele ïÈcza Czas zaczÈÊ dziaïaÊ — pobieranie listy nazw znajomych uĝytkownika za pomocÈ AS3 Czas zaczÈÊ dziaïaÊ — ïatwiejszy sposób Czas zaczÈÊ dziaïaÊ — ograniczanie liczby wywoïañ API do jednego Graph jako warstwa Uprawnienia Sprawdzanie istniejÈcych uprawnieñ Uzyskiwanie dalszych informacji Ograniczenia Wyszukiwania muszÈ wykorzystywaÊ pole indeksowane Czy to ma znaczenie praktyczne? 199 200 201 203 203 204 204 210 210 211 212 212 213 214 215 216 217 218 218 218 219 219 219 219 223 224 224 225 226 226 227 230 232 234 235 236 238 239 239 240 241 241 242 243 243 244 6 Spis treĞci Zaawansowany FQL Operatory Operatory porównania Operatory logiczne Sortowanie Stronicowanie Dodatkowe funkcje Wywoïywanie kilku zapytañ jednoczeĂnie Podsumowanie Rozdziaï 8. Zakoñczenie Umieszczanie aplikacji online Na Facebooku IFrame Czas zaczÈÊ dziaïaÊ — przygotowanie IFrame aplikacji Zakïadki na stronie Czas zaczÈÊ dziaïaÊ — dodawanie aplikacji do zakïadki strony Poza Facebookiem Wïasna witryna Portale gier Flash Jako aplikacja desktopowa AIR Czas zaczÈÊ dziaïaÊ — autoryzacja za pomocÈ AIR i HTTP Czas zaczÈÊ dziaïaÊ — autoryzacja za pomocÈ AIR i SDK Jako aplikacja AIR dla systemu Android Czas zaczÈÊ dziaïaÊ — autoryzacja w systemie Android Konfigurowanie ustawieñ aplikacji na Facebooku UdostÚpnianie aplikacji Edytowanie strony profilu aplikacji Katalog aplikacji Facebooka Uwaga na przestrzeganie zasad! Co dalej? Oficjalny AS3 Facebook SDK Inne API dla Facebooka JavaScript SDK Insights API Facebook Chat API Internationalization API Usïuga Adobe Social Technologie powiÈzane PHP Protokóï Open Graph Aktualizacje w czasie rzeczywistym Zupeïnie nowe i dostÚpne wkrótce Facebook Credits Uĝytkownicy testowi Nowe wiadomoĂci Zasoby dla programistów Facebooka Oficjalne zasoby Facebooka Inne dobre witryny Ja, ja, ja! 244 245 245 245 246 246 247 248 248 251 251 252 252 253 256 256 258 259 260 261 261 263 265 265 267 268 269 272 273 274 274 274 274 275 275 275 275 276 276 276 276 277 277 277 277 277 277 278 279 7 Spis treĞci NadÈĝyÊ za Zuckerbergami Radzenie sobie ze zmianami Podsumowanie Dodatek A. Odpowiedzi na pytania do quizów Rozdziaï 2. Rozdziaï 3. Rozdziaï 4. Rozdziaï 5. Rozdziaï 6. Rozdziaï 7. Skorowidz 279 280 280 281 281 281 282 282 282 282 283 8 2 Witaj w Graphie Facebook przechowuje ogromnÈ iloĂÊ informacji o ludziach, firmach, wydarzeniach, a takĝe albumy ze zdjÚciami i wiele innych. W nim znajdziesz takĝe informacje, w jaki sposób sÈ one poïÈczone: kto jest wïaĂcicielem kaĝdego z albumów, kto jest na zdjÚciu, która firma organizuje kaĝde wydarzenie. Przez cztery lata dostÚp do wszystkich tych informacji uzyskiwano za pomocÈ rozbudowanego API, który w miarÚ dodawania do niego nowych funkcji stawaï siÚ coraz bardziej zïoĝony. W kwietniu 2010 Facebook uruchomiï Graph API, który znacznie uproĂciï dostÚp do wszel- kich danych. W tym rozdziale: Q Poznasz Facebook Graph. Q Dowiesz siÚ, czym jest Graph API i jakÈ strukturÚ nadaje wszystkim danym na Facebooku. Q Uzyskasz dostÚp do publicznych danych Graphu za pomocÈ AS3 i Graph API. Zaczynamy. DostÚp do Graph API poprzez przeglÈdarkÚ Przejdziemy od razu do rzeczy — zobaczymy, jak Graph API prezentuje informacje ze strony publicznej. Facebook Graph API. Tworzenie rozbudowanych rozwiązaĔ we Flashu Kaĝdy uĝytkownik Facebooka ma wïasny profil osobisty, który moĝesz zobaczyÊ po zalogowaniu siÚ na Facebook i klikniÚciu ïÈcza Profile (Profil) na pasku nawigacji na górze witryny. Profile publiczne wyglÈ- dajÈ podobnie, ale sÈ zaprojektowane jako sposób zaistnienia na Facebooku dla przedsiÚbiorstw, ze- spoïów muzycznych, produktów, organizacji i osób publicznych. Oznacza to, ĝe wielu ludzi ma zarówno profil osobisty, jak i publiczny. Przykïadowo Mark Zuckerberg — twórca Facebooka — ma profil osobisty pod adresem http://www.facebook.com/zuck oraz profil pu- bliczny pod adresem http://www.facebook.com/markzuckerberg. W ten sposób moĝe uĝywaÊ profilu osobistego do kontaktów ze znajomymi i rodzinÈ, a publicznego — dla fanów i innych zwolenników. Istnieje jeszcze jeden rodzaj strony: strona spoïecznoĂciowa. Strony tego rodzaju sÈ bardzo podobne do profili osobistych, jednak nie dotyczÈ osób, tylko innych bytów, takich jak interesujÈce zagadnienia, doĂwiadczenia i szczytne sprawy. Takie strony automatycznie pobierajÈ informacje z Wikipedii na dany temat, jeĂli to potrzebne, oraz przekazujÈ na ĝywo wszelkie posty na tablicy na dany temat. Wszystko to moĝe wydawaÊ siÚ nieco zagmatwane, jednak nie powinieneĂ siÚ przejmowaÊ — kiedy za- czniesz korzystaÊ z róĝnego rodzaju stron, wszystko stanie siÚ jasne. Czas zaczÈÊ dziaïaÊ — ïadowanie strony W przeglÈdarce przejdě do adresu http://www.facebook.com/PacktPub, aby zaïadowaÊ stronÚ Packt Publishing na Facebooku. Zobaczysz listÚ najnowszych postów na tablicy, zakïadkÚ Info oraz albumy ze zdjÚciami (zawierajÈ gïównie okïadki ksiÈĝek), a takĝe zdjÚcie profilowe oraz listÚ fanów i ïÈczy (patrz rysunek na nastÚpnej stronie). Tak wïaĂnie uĝytkownicy witryny widzÈ zawarte w niej informacje. W jaki sposób „zobaczy” je nasz kod? Moĝemy sprawdziÊ, jak Graph API odtwarza zawartoĂÊ strony Packt Publishing; wystarczy wpisaÊ w przeglÈdarce adres https://graph.facebook.com/PacktPub. Adres ten to Graph URL — zauwaĝ, ĝe to ten sam adres, co adres samej strony, ale z bezpiecznym poïÈ- czeniem https oraz poddomenÈ graph zamiast WWW. Zobaczysz informacje zaprezentowane w nastÚpujÈcy sposób: { id : 204603129458 , name : Packt Publishing , picture : http://profile.ak.fbcdn.net/hprofile-ak-snc4/hs302.ash1/2327 ´4_204603129458_7460_s.jpg , link : http://www.facebook.com/PacktPub , category : Products_other , username : PacktPub , company_overview : Packt is a modern, IT focused book publisher, ´specializing in producing cutting-edge books for communities of developers, ´administrators, and newbies alike. Packt published its first book, ´Mastering phpMyAdmin for MySQL Management in April 2004. , fan_count : 412 } 32 Rozdziaá 2. • Witaj w Graphie 33 Facebook Graph API. Tworzenie rozbudowanych rozwiązaĔ we Flashu Co siÚ zdarzyïo? PobraïeĂ reprezentacjÚ strony Packt Publishing w Graph API do swojej przeglÈdarki. Graph API zostaï zaprojektowany tak, aby ïatwo byïo go poznaÊ — jest sam dla siebie doku- mentacjÈ — udaïo siÚ osiÈgnÈÊ ten efekt. Jasne jest, ĝe powyĝsze dane to lista pól i ich wartoĂci. Jednym polem, którego znaczenie moĝe nie byÊ jasne, jest id. To numer, którego Facebook uĝywa wewnÚtrznie do wskazywania strony. Oznacza to, ĝe strona ma dwa numery ID: numeryczny przypisywany automatycznie przez Facebook oraz alfanumeryczny wybierany przez wïaĂciciela strony. Te dwa ID sÈ dla siebie odpowiednikami: jeĂli wpiszesz w przeglÈdarce https://graph. facebook.com/204603129458, zobaczysz dokïadnie te same dane, co dla https://graph.facebook. com/PacktPub. Do przeÊwiczenia — oglÈdanie innych obiektów OczywiĂcie, strona Packt Publishing nie jest jedynÈ stronÈ, którÈ moĝesz obejrzeÊ za pomocÈ Graph API w przeglÈdarce. Wyszukaj inne strony na Facebooku, nastÚpnie za pomocÈ for- matu https://graph.facebook.com/id obejrzyj ich reprezentacje w Graph API. Czy zawierajÈ wiÚcej informacji, czy mniej? NastÚpnie przejdě do innych obiektów Facebooka: profili osobistych, wydarzeñ, grup. Dla profili osobistych ID moĝe byÊ alfanumeryczny (jeĂli osoba zarejestrowaïa wïasnÈ nazwÚ uĝytkowni- ka Facebooka pod adresem http://www.facebook.com/username/), ale najczÚĂciej ID bÚdzie numeryczny — przydzielony automatycznie przez Facebook w chwili rejestracji uĝytkownika. Dla niektórych typów obiektów (np. albumów zdjÚÊ) wartoĂci ID nie bÚdzie moĝna ïatwo od- czytaÊ z adresu URL na witrynie Facebooka. Takimi przypadkami zajmiemy siÚ dalej w tym rozdziale. Czasem otrzymasz informacjÚ o bïÚdzie, takÈ jak ta: { error : { type : OAuthAccessTokenException , message : An access token is required to request this resource. } } RozwiÈzaniem tego problemu zajmiemy siÚ w dalszej czÚĂci ksiÈĝki. Korzystanie z Graph API za pomocÈ AS3 Juĝ wiesz, jak ïatwo odczytywaÊ dane Facebooka w przeglÈdarce. Teraz zobaczysz, jak je po- bieraÊ za pomocÈ AS3. 34 Rozdziaá 2. • Witaj w Graphie Czas zaczÈÊ dziaïaÊ — pobieranie informacji ze strony za pomocÈ AS3 Przygotuj projekt za pomocÈ plików startowych rozdziaïu 2., tak jak wyjaĂniono w rozdziale 1. Sprawdě, czy projekt kompiluje siÚ bez bïÚdów (moĝe pojawiÊ siÚ kilka ostrzeĝeñ, zaleĝnie od ustawieñ IDE). PowinieneĂ zobaczyÊ SWF o wymiarach 640 na 480 pikseli, w kolorze biaïym i z trzema przyciskami w lewym górnym rogu: Zoom In (powiÚksz), Zoom out (zmniejsz) oraz Reset View (zeruj widok). Ten projekt jest podstawÈ bogatej aplikacji internetowej (RIA), za pomocÈ której bÚdzie moĝ- na przeglÈdaÊ wszystkie informacje na Facebooku przy uĝyciu Graph API. Caïy kod UI jest juĝ gotowy, potrzeba tylko danych Graph do wyrenderowania informacji. Naszym zadaniem bÚdzie napisanie kodu, który pobierze te dane i przekaĝe do rendererów. Nie bÚdÚ zagïÚbiaï siÚ w szczegóïy caïego projektu i wyjaĂniaï, co robi kaĝda klasa, poniewaĝ tematem tej ksiÈĝki jest wykorzystanie Facebooka w poïÈczeniu z Flashem, a nie budowanie aplikacji RIA. W tej chwili powinieneĂ wiedzieÊ, jak dziaïa pojedyncza instancja z pakietu controllers. Obiekt klasy CustomGraphContainerController jest tworzony w chwili inicjaliza- cji projektu i odpowiada za przepïyw danych do i z Facebooka. W tym celu dziedziczy kilka przydatnych metod po klasie controllers.GCController; skorzystamy z nich póěniej. Za pomocÈ swojego IDE otwórz klasÚ CustomGraphContainerController. Znajduje siÚ ona w pliku srccontrollersCustomGraphContainerController.as, a jej zawartoĂÊ jest taka jak w listingu niĝej: package controllers { import ui.GraphControlContainer; public class CustomGraphContainerController extends GCController { public function CustomGraphContainerController(a_graphControlContainer: ´GraphControlContainer) { super(a_graphControlContainer); } } } Na poczÈtku przy uĝyciu Graph URL pobierzemy reprezentacjÚ strony Packt Publishing w Graph API, tak samo jak robiliĂmy to w przeglÈdarce. W tym celu moĝemy skorzystaÊ z klasy URLLoader. 35 Facebook Graph API. Tworzenie rozbudowanych rozwiązaĔ we Flashu Klasy URLLoader i URLRequest uĝywane sÈ razem do ïadowania danych z adresu URL. Dane te mogÈ byÊ tekstem, danymi binarnymi lub zmiennymi zakodowanymi w URL. ’adowanie rozpoczyna siÚ od przeka- zania obiektu URLRequest, którego wïaĂciwoĂÊ url zawiera ĝÈdany URL, do metody load() obiektu URLLoader. Po zakoñczeniu ïadowania ĝÈdanych danych URLLoader wywoïuje zdarzenie COMPLETE. Dane moĝna odczytaÊ z wïaĂciwoĂci data tego zdarzenia. Zmodyfikuj CustomGraphContainerController.as w nastÚpujÈcy sposób (nowe linie wyróĝnio- ne sÈ pogrubieniem): package controllers { import flash.events.Event; import flash.net.URLLoader; import flash.net.URLRequest; import ui.GraphControlContainer; public class CustomGraphContainerController extends GCController { public function CustomGraphContainerController(a_graphControlContainer: ´GraphControlContainer) { super(a_graphControlContainer); var loader:URLLoader = new URLLoader(); var request:URLRequest = new URLRequest(); //wskaĪ, który Graph URL zaáadowaü request.url = https://graph.facebook.com/PacktPub ; loader.addEventListener(Event.COMPLETE, onGraphDataLoadComplete); //rozpocznij wáaĞciwy proces áadowania loader.load(request); } private function onGraphDataLoadComplete(a_event:Event):void { var loader:URLLoader = a_event.target as URLLoader; //pobierz dane, które zostaáy zaáadowane, i wyĞwietl je var graphData:String = loader.data; trace(graphData); } } } Tutaj tylko ïadujemy informacje z adresu https://graph.facebook.com/PackPub i wypisujemy je w oknie wyjĂcia. 36 Rozdziaá 2. • Witaj w Graphie Przetestuj projekt i obejrzyj zawartoĂÊ okna wyjĂcia. PowinieneĂ zobaczyÊ nastÚpujÈce dane: { id : 204603129458 , name : Packt Publishing , picture : http://profile.ak. ´fbcdn.net/hprofile-ak-snc4/hs302.ash1/23274_204603129458_7460_s.jpg , ´ link : http://www.facebook.com/PacktPub , category : Products_other , ´ username : PacktPub , company_overview : Packt is a modern, IT focused book ´publisher,specializing in producing cutting-edge books for communities of ´developers, administrators, and newbies alike. Packt published its first ´book, Mastering phpMyAdmin for MySQL Management in April 2004. , fan_count :412} Jeĝeli otrzymujesz bïÈd, sprawdě, czy Twój kod odpowiada kodowi zamieszczonemu powyĝej. JeĂli w oknie wyjĂcia nie ma nic, upewnij siÚ, ĝe jesteĂ poïÈczony z internetem. JeĂli ciÈgle nic nie widaÊ, byÊ moĝe ustawienia zabezpieczeñ nie zezwalajÈ na dostÚp do internetu poprzez Flash, sprawdě takÈ moĝliwoĂÊ. Co siÚ zdarzyïo? Podziaïy wierszy i tabulatory pomiÚdzy wartoĂciami zostaïy usuniÚte, a niektóre znaki ukryte, dziÚki czemu tekst trudno odczytaÊ, jednak moĝesz przekonaÊ siÚ, ĝe to te same dane, które uzyskaliĂmy, wpisujÈc w przeglÈdarce https://graph.facebook.com/PacktPub. Nie ma tu ĝadnych niespodzianek — wïaĂnie tak dziaïa URLLoader. Dane w takiej postaci nie sÈ szczególnie przydatne. Aby coĂ z nimi zrobiÊ, bÚdziemy musieli skonwertowaÊ je na obiekt, z którym bÚdziemy mogli wspóïpracowaÊ bezpoĂrednio w AS3. Format wykorzystany w Graph API nosi nazwÚ JSON (wymawiane „dĝejson”, skrót od ang. JavaScript Object Notation — obiekt w notacji JavaScript). JSON jest zrozumiaïym dla czïowieka formatem danych opartym na tekĂcie. Pozwala na pre- zentowanie obiektów jako par klucz-wartoĂÊ w nastÚpujÈcy sposób: { klucz1 : wartoĂÊ1 , klucz2 : wartoĂÊ2 , klucz3 : wartoĂÊ3 } WartoĂci mogÈ byÊ ciÈgami znaków (w cudzysïowie), liczbami, wartoĂciami Boolean lub null (bez cudzysïowów). Obiekty JSON mogÈ takĝe zawieraÊ tablice oznaczone nawiasami kwadratowymi: { klucz1 : wartoĂÊ1 , tablica : [ Pierwszy element w tablicy , Drugi element w tablicy , Trzeci element w tablicy ] } 37 Facebook Graph API. Tworzenie rozbudowanych rozwiązaĔ we Flashu MogÈ nawet zawieraÊ inne obiekty JSON oznaczone zagnieĝdĝonymi nawiasami klamrowymi: { klucz1 : wartoĂÊ1 , podObiekt : { podKlucz1 : podWartoĂÊ1 , podKlucz2 : podWartoĂÊ2 , } } Takie podobiekty mogÈ zawieraÊ inne obiekty lub tablice, a tablice mogÈ zawieraÊ kolejne obiekty i tablice. Zauwaĝ, ĝe przypomina to skïadniÚ AS3 sïuĝÈcÈ do deklarowania obiektu: var obiektAS3:Object = { klucz1: wartoĂÊ1 , klucz2: wartoĂÊ2 , podObiekt:{ podKlucz1: podwartoĂÊ1 }, mojaTablica:[1, 2, 3] } WiÚcej informacji znajdziesz na http://www.json.org. W odróĝnieniu od XML, AS3 nie ma wbudowanych funkcji obsïugujÈcych obiekty JSON, ist- nieje jednak oficjalnie wspierana biblioteka, która to robi. Czas zaczÈÊ dziaïaÊ — deserializowanie obiektu JSON Biblioteka Adobe as3corelib zawiera zestaw klas narzÚdziowych sïuĝÈcych do serializowania i deserializowania JSON. Jest dostÚpna pod adresem http://github.com/mikechambers/as3corelib, ale nie musisz jej pobieraÊ, poniewaĝ znajduje siÚ takĝe w katalogu src projektu (skïada siÚ ze wszystkich klas w pakiecie com.adobe.*). 1. W CustomGraphContainerController.as zaimportuj klasÚ JSON: import com.adobe.serialization.json.JSON; 2. Zmodyfikuj funkcjÚ onGraphDataLoadComplete() tak, aby deserializowaïa ciÈg znaków JSON na obiekt zamiast prostego wyĂwietlania tego ciÈgu: private function onGraphDataLoadComplete(a_event:Event):void { var loader:URLLoader = a_event.target as URLLoader; 38 Rozdziaá 2. • Witaj w Graphie //pobierz dane, które zostaáy zaáadowane, i wyĞwietl je var graphData:String = loader.data; var decodedJSON:Object = JSON.decode(graphData); } 3. WyĂwietl wïaĂciwoĂÊ name nowego obiektu, aby sprawdziÊ dziaïanie kodu: private function onGraphDataLoadComplete(a_event:Event):void { var loader:URLLoader = a_event.target as URLLoader; //pobierz dane, które zostaáy zaáadowane, i wyĞwietl je var graphData:String = loader.data; var deserialisedJSON:Object = JSON.decode(graphData); trace( name: , decodedJSON.name); } 4. Skompiluj i uruchom SWF. Rezultat powinien byÊ nastÚpujÈcy: name: Packt Publishing Co siÚ zdarzyïo? PrzekazaliĂmy ciÈg znaków do metody JSON.decode(): { id : 204603129458 , name : Packt Publishing , picture : http://profile.ak.fbcdn.net/hprofile-ak-snc4/hs302.ash1/23274_ ´204603129458_7460_s.jpg , link : http://www.facebook.com/PacktPub , category : Products_other , username : PacktPub , company_overview : Packt is a modern, IT focused book publisher,specializing ´in producing cutting-edge books for communities of developers, administrators, ´and newbies alike. Packt published its first book, Mastering phpMyAdmin ´for MySQL Management in April 2004. , fan_count :412 } W efekcie ïañcuch zostaï zamieniony na obiekt wïasny AS3, tak jakbyĂmy wpisali: var graphObject:Object = {}; graphObject.id = 204603129458 ; graphObject.name = Packt Publishing ; graphObject.picture = http://profile.ak.fbcdn.net/hprofile-ak-snc4/hs302.ash1/ ´23274_204603129458_7460_s.jpg ; graphObject.link = http://www.facebook.com/PacktPub ; graphObject.category = Products_other ; graphObject.username = PacktPub ; graphObject.company_overview = Packt is a modern, IT focused book publisher, specializing in producing cutting-edge books for communities of developers, administrators, and newbies alike. Packt published its first book, Mastering phpMyAdmin for MySQL Management in April 2004. graphObject.fan_count = 412; 39 Facebook Graph API. Tworzenie rozbudowanych rozwiązaĔ we Flashu (Zauwaĝ, ĝe w odróĝnieniu od „surowego” ciÈgu znaków, którego uĝyliĂmy wczeĂniej, znaki uko- Ănika w URL nie zostaïy oznaczone znakami ucieczki). Oznacza to, ĝe moĝemy ïatwo uzyskaÊ dostÚp do wszelkich informacji, które posiada Facebook na temat tej strony, moĝemy nawet iterowaÊ poprzez poszczególne elementy danych. Czas zaczÈÊ dziaïaÊ — wizualizowanie informacji DoĂÊ instrukcji trace()! Czas wyĂwietliÊ coĂ we wïaĂciwym pliku SWF. CustomGraphContainerController dziedziczy metodÚ renderGraphObject(), która zrobi to dla nas. Wystarczy przekazaÊ jej argument typu graph.GraphObject. GraphObject.as jest prostÈ klasÈ, otwórz plik i obejrzyj jÈ: package graph { import graph.controls.GraphObjectRenderer; public dynamic class GraphObject extends BaseGraphItem { public var rendererObject:GraphObjectRenderer; public var graphObjectListRenderers:Array = []; public function GraphObject() { } } } Nie powinieneĂ zajmowaÊ siÚ tym kodem. Musisz tylko wiedzieÊ, ĝe jest oznaczony jako dynamic, co znaczy, ĝe moĝesz tworzyÊ nowe wïaĂciwoĂci w czasie wykonywania bez nadawania im nazw wczeĂniej. Moĝemy wiÚc zrobiÊ tak: var graphObject:GraphObject = new GraphObject(); graphObject.favoriteColor = red ; Kiedy GraphObject zostanie przekazany do metody CustomGraphContainerController.renderGraph ´Object(), kaĝda z wïaĂciwoĂci GraphObject zostanie wyrenderowna na liĂcie — automatycznie, kaĝda wïaĂciwoĂÊ wraz z tymi dwiema, które juĝ zostaïy zdefiniowane wewnÈtrz klasy. WewnÈtrz funkcji CustomGraphContainerController.onGraphDataLoadComplete() wykonaj na- stÚpujÈce czynnoĂci. 40 Rozdziaá 2. • Witaj w Graphie 1. Utwórz nowÈ instancjÚ GraphObject. 2. Skopiuj wszystkie wïaĂciwoĂci decodedJSON do nowego GraphObject. 3. Przekaĝ GraphObject do renderGraphObject(). 4. Kod, który to wszystko wykonuje, jest nastÚpujÈcy: private function onGraphDataLoadComplete(a_event:Event):void { var loader:URLLoader = a_event.target as URLLoader; //pobierz dane, które zostaáy zaáadowane, i wyĞwietl je var graphData:String = loader.data; var decodedJSON:Object = JSON.decode(graphData); var graphObject:GraphObject = new GraphObject(); //skopiuj wszystkie wáaĞciwoĞci z decodedJSON do graphObject for (var key:String in decodedJSON) { graphObject[key] = decodedJSON[key]; } this.renderGraphObject(graphObject); } 5. Skompiluj i przetestuj. Otrzymany SWF pokazany zostaï na rysunku poniĝej. Kliknij przycisk Zoom In (powiÚksz) kilka razy, aby renderer staï siÚ wiÚkszy i lepiej widocz- ny, tak jak na rysunku powyĝej. Twój renderer moĝe wyĂwietlaÊ pola w innej kolejnoĂci; Fa- cebook zwraca pola w przypadkowej kolejnoĂci. Co siÚ zdarzyïo? Okno, które pojawiïo siÚ na scenie, nazywam rendererem, a konkretnie rendererem obiektu Graph. Moĝe byÊ ono przeciÈgane poprzez chwycenie za pasek tytuïowy, jego zawartoĂÊ moĝna przewijaÊ, a caïe okno zamknÈÊ, klikajÈc przycisk w prawym górnym rogu. 41 Facebook Graph API. Tworzenie rozbudowanych rozwiązaĔ we Flashu Udaïo Ci siÚ pobraÊ dane z Graph API Facebooka i wyĂwietliÊ je w SWF. Plik SWF jest ela- styczny — wystarczy, ĝe zmienisz wartoĂÊ request.url, tak aby wskazywaïa na Graph URL innego obiektu Facebooka, i zobaczysz obiekt ten wyĂwietlony w rendererze. WiÚkszoĂÊ danych z GraphObject zostaïa wyĂwietlona w polu tekstowym wewnÈtrz okna w pro- stym formacie klucz: wartoĂÊ . Pole name strony jest wyĂwietlone na pasku tytuïowym okna, a jeĂli strona ma pole picture (w JSON widzimy, ĝe PacktPub ma), obraz jest pobierany i wy- Ăwietlany wewnÈtrz renderera za pomocÈ obiektu Loader. Podobnie do URLLoader, klasa flash.display.Loader pobiera obiekt, który wskazuje URLRequest, oraz wywoïuje zdarzenie COMPLETE, kiedy pobieranie zostaje zakoñczone. W odróĝnieniu od URLLoader, Loader sïuĝy do pobierania obrazów i plików SWF, a zdarzenie jest wywoïywane przez jeden z jego podobiektów — contentLoaderInfo. Loader jest rozszerzeniem DisplayObject i przyjmuje wyglÈd obrazu, kiedy skoñczy go pobieraÊ. Model zabezpieczeñ Flasha zapobiega dostÚpowi do danych obrazów z plików SWF znajdujÈcych siÚ w innej domenie niĝ obraz, chyba ĝe plik reguï miÚdzydomenowych umieszczony w domenie obrazu na to zezwala. Na szczÚĂcie, plik tego rodzaju na Facebooku jest tolerancyjny i pozwala na dostÚp z kaĝdej domeny. Jest to graficzna reprezentacja obiektu strony z Graph API. PoïÈczenia ByÊ moĝe myĂlisz: „To bardzo ïadnie, ale przecieĝ okno nie pokazuje wszystkich informacji zwiÈzanych ze stronÈ, czyĝ nie? Gdzie sÈ posty z tablicy i zdjÚcia?”. Czas zaczÈÊ dziaïaÊ — wyszukiwanie poïÈczeñ w przeglÈdarce Facebook traktuje wszystkie posty z tablic, zdjÚcia, wideo, a nawet informacje o statusie jako odrÚbne obiekty w Graph API; nie umieszcza ich razem w obiekcie strony. Oto na przykïad obiekt reprezentujÈcy pojedynczy post autorstwa Packt Publishing: { id : 204603129458_127056137323572 , from : { name : Packt Publishing , category : Products_other , id : 204603129458 }, 42 Rozdziaá 2. • Witaj w Graphie message : The Amazon SimpleDB Developer Guide has been published! Get your ´copy now! http://bit.ly/blFQUG , picture : http://external.ak.fbcdn.net/safe_image.php?d=c4a7887cb52dd8f93e439aaec13c034 ´b w=130 h=130 url=https 3A 2F 2Fwww.packtpub.com 2Fsites 2Fdefault 2Ffiles ´2Fimagecache 2Fproductview 2F7344EN_MockupCover 2520Template.jpg , link : http://bit.ly/blFQUG , name : Amazon SimpleDB Developer Guide | Packt Publishing Technical IT Book ´Store , caption : bit.ly , description : Gain in-depth understanding of Amazon SimpleDB with PHP, Java, ´and Python examples, and run optimized database-backed applications on Amazon\ s Web Services cloud , icon : http://static.ak.fbcdn.net/rsrc.php/zB010/hash/9yvl71tw.gif , type : link , created_time : 2010-06-04T12:39:44+0000 , updated_time : 2010-06-04T12:39:44+0000 , likes : 1 } Ten obiekt juĝ wygasï i nie jest dostÚpny przy uĝyciu Graph API, jednak — jak byÊ moĝe zgadïeĂ — byï dostÚpny pod adresem https://graph.facebook.com/204603129458_1270561 37323572. Jest w tym samym formacie, co obiekt strony, chociaĝ ma kilka innych pól, a wiÚc nasz renderer obiektów Graph mógïby wyrenderowaÊ go poprawnie. OczywiĂcie, takie rozwiÈzanie jest bezuĝyteczne, chyba ĝe bÚdziemy znali ID kaĝdego z po- stów przypisanych Packt Publishing. Nie wiadomo, skÈd uzyskaÊ takie dane. A moĝe jednak wiadomo? Powiedziaïem wczeĂniej, ĝe Graph API zostaï zaprojektowany tak, aby byÊ dokumentacjÈ dla samego siebie. Moĝemy zaĝÈdaÊ dodatkowych metainformacji o dowolnym obiekcie Graph poprzez dodanie flagi metadata=1 na koñcu dowolnego Graph URL. Otwórz https://graph. facebook.com/PacktPub?metadata=1 w przeglÈdarce. W JSON pojawi siÚ nowa wïaĂciwoĂÊ type. type : page To jest przydatne, bo — jak powiedziaïem — posty i strony (oraz wszystkie obiekty Graph) przyjmujÈ ten sam format, a ta wïaĂciwoĂÊ umoĝliwia ich rozpoznawanie. W tej chwili jednak bardziej interesuje nas nowy obiekt metadata. Zawiera on jeden obiekt connections oraz jednÈ tablicÚ fields. Przyjrzyjmy siÚ najpierw tablicy fields: fields : [ { name : id , description : The page s ID }, { name : name , description : The page s name 43 Facebook Graph API. Tworzenie rozbudowanych rozwiązaĔ we Flashu }, { name : picture , description : The pages profile picture }, { name : category , description : The page s category }, { name : fan_count , description : \* The number of fans the page has } ] Jest to lista wyjaĂniajÈca, co reprezentuje kaĝde z pól w ciele obiektu Graph. W czasie pisania tej ksiÈĝki zostaïa dodana nowa funkcja, a wiÚc lista moĝe byÊ peïniejsza, kiedy Ty jÈ zobaczysz. Oto obiekt connections: connections : { feed : https://graph.facebook.com/packtpub/feed , posts : https://graph.facebook.com/packtpub/posts , tagged : https://graph.facebook.com/packtpub/tagged , statuses : https://graph.facebook.com/packtpub/statuses , links : https://graph.facebook.com/packtpub/links , notes : https://graph.facebook.com/packtpub/notes , photos : https://graph.facebook.com/packtpub/photos , albums : https://graph.facebook.com/packtpub/albums , events : https://graph.facebook.com/packtpub/events , videos : https://graph.facebook.com/packtpub/videos } Obejrzyj w przeglÈdarce jeden z adresów URL z poprzedniej listy: http://graph.facebook.com/ packtpub/posts. Zwraca on strukturÚ JSON zawierajÈcÈ tablicÚ data oraz obiekt paging. Tablica data zawiera kilka obiektów post, obiektem paging zajmiemy siÚ w dalszej czÚĂci ksiÈĝki. Co siÚ zdarzyïo? Parametr metadata=1 nakazuje interfejsowi Graph API wyĂwietlenie wszystkich metadanych o bieĝÈcym obiekcie, w tym przypadku sÈ to miÚdzy innymi typ obiektu, tablica opisów wïa- ĂciwoĂci obiektu oraz wszystkie adresy URL, które zawierajÈ listy obiektów powiÈzanych z tÈ stronÈ. Od takiego ukïadu pochodzi nazwa Graph API. W zwykïym znaczeniu angielskie sïowo graph oznacza wykres, taki jak pokazany na kolejnym rysunku. 44 Rozdziaá 2. • Witaj w Graphie Jednak w matematyce „graf” to zbiór wierzchoïków poïÈczonych krawÚdziami, tak jak na ry- sunku poniĝej. Graph API to reprezentacja danych przechowywanych na Facebooku, uïoĝonych tak jak na kolejnym rysunku. Na diagramie z rysunku powyĝej kaĝdy obiekt jest wierzchoïkiem, a krawÚdzie reprezentujÈ róĝne rodzaje poïÈczeñ. Przywoïanie http://graph.facebook.com/packtpub/posts zwraca wszystkie wierzchoïki zïÈczone z PacktPub za pomocÈ poïÈczenia typu posts, czyli wszystkie obiekty post, które zostaïy umieszczone na tablicy wydawnictwa Packt. 45 Facebook Graph API. Tworzenie rozbudowanych rozwiązaĔ we Flashu Do przeÊwiczenia — badanie poïÈczeñ PoznaïeĂ parametr metadata, moĝesz zatem za pomocÈ przeglÈdarki zbadaÊ róĝne rodzaje po- ïÈczeñ i zobaczyÊ, jakiego rodzaju obiekty moĝna znaleěÊ. Renderowanie list Co siÚ stanie, jeĂli spróbujesz zaïadowaÊ https://graph.facebook.com/packtpub/posts za pomo- cÈ tego samego kodu, którego uĝyliĂmy do zaïadowania obiektu strony Packt Publishing? W panelu wyjĂcia otrzymasz nastÚpujÈcy komunikat: Graph Object was null! Nie udaïo siÚ. Sposób, w jaki Graph API okreĂla strukturÚ JSON, w tym przypadku jest zupeïnie róĝny od struktury JSON dla strony, posta lub kaĝdego innego obiektu Graph. To samo bÚdzie dotyczyÊ JSON dla adresów URL innych poïÈczeñ. StrukturÚ tÚ nazywamy listÈ Graph. Czas zaczÈÊ dziaïaÊ — renderowanie list postów Jako ĝe wïaĂciwoĂÊ data listy Graph jest tablicÈ obiektów Graph, moĝemy przejĂÊ przez niÈ w pÚtli i utworzyÊ renderer obiektu Graph dla kaĝdego elementu. Moĝesz spróbowaÊ to zro- biÊ, ja jednak preferujÚ inne rozwiÈzanie. Utworzyïem drugi renderer: tym razem renderer listy Graph. Utworzyïem takĝe klasÚ graph. ´GraphList. CustomGraphContainerController dziedziczÈcÈ metodÚ renderGraphList(). Przyjmuje ona jako parametr obiekt typu graph.GraphList i tworzy nowy renderer listy Graph sïuĝÈcy do wyĂwietlania jego zawartoĂci. Potrzebujemy wiÚc listy Graph — otrzymamy jÈ od Graph API — którÈ przeksztaïcimy w instancjÚ klasy GraphList. Klasa GraphList jest nieco bardziej skomplikowana niĝ GraphObject; posiada metodÚ addToList(), do której moĝemy przekazaÊ dowolnÈ instancjÚ GraphObject, aby dodaÊ jÈ do listy. 46 Rozdziaá 2. • Witaj w Graphie CiÈgle bÚdziemy przechodziÊ w pÚtli przez tablicÚ data, ale zamiast renderowaÊ kaĝdy Graph ´Object oddzielnie, dodamy go do GraphList i jÈ wyrenderujemy. Zmodyfikuj URL, którego potrzebuje CustomGraphContainerController, tak aby ïadowana byïa lista postów: public function CustomGraphContainerController(a_graphControlContainer:GraphControlContainer) { super(a_graphControlContainer); var loader:URLLoader = new URLLoader(); var request:URLRequest = new URLRequest(); // wskaĪ, który Graph URL zaáadowaü request.url = https://graph.facebook.com/PacktPub/posts ; loader.addEventListener(Event.COMPLETE, onGraphDataLoadComplete); // rozpocznij wáaĞciwy proces áadowania loader.load(request); } Po zaïadowaniu trzeba zweryfikowaÊ, czy zwrócony element to obiekt Graph, czy lista Graph. Moĝemy to zrobiÊ, sprawdzajÈc wïaĂciwoĂÊ data: jeĝeli wïaĂciwoĂÊ ta istnieje, moĝemy przy- jÈÊ, ĝe element jest listÈ. private function onGraphDataLoadComplete(a_event:Event):void { var loader:URLLoader = a_event.target as URLLoader; //pobierz dane, które zostaáy zaáadowane, i wyĞwietl je var graphData:String = loader.data; var decodedJSON:Object = JSON.decode(graphData); if (decodedJSON.data) { //ma wáaĞciwoĞü data, a wiĊc przyjmujemy, Īe jest to lista Graph } else { //nie ma wáaĞciwoĞci data, a wiĊc przyjmujemy, Īe jest to obiekt Graph var graphObject:GraphObject = new GraphObject(); //skopiuj wszystkie wáaĞciwoĞci z rozkodowanej struktury JSON do graphObject for (var key:String in decodedJSON) { graphObject[key] = decodedJSON[key]; } this.renderGraphObject(graphObject); } } WewnÈtrz bloku if tworzymy na poczÈtku instancjÚ GraphList: if (decodedJSON.data) { //ma wáaĞciwoĞü data, a wiĊc przyjmujemy, Īe jest to lista Graph 47 Facebook Graph API. Tworzenie rozbudowanych rozwiązaĔ we Flashu var graphList:GraphList = new GraphList(); } (BÚdziesz musiaï dodaÊ instrukcjÚ import graph.GraphList). PamiÚtaj, ĝe decodedJSON.data jest tablicÈ obiektów; przechodzimy przez niÈ w pÚtli i tworzymy GraphObject dla kaĝdego elementu. if (decodedJSON.data) { //ma wáaĞciwoĞü data, a wiĊc przyjmujemy, Īe jest to lista Graph var graphList:GraphList = new GraphList(); var childGraphObject:GraphObject; for each (var childObject:Object in decodedJSON.data) { childGraphObject = new GraphObject(); for (var childKey:String in childObject) { childGraphObject[childKey] = childObject[childKey]; } } } To w zasadzie to samo, co robiliĂmy z decodedJSON przy ïadowaniu pojedynczego obiektu Graph. A druga wïaĂciwoĂÊ wewnÈtrz listy Graph, czyli obiekt paging? PowinniĂmy dodaÊ takĝe jÈ: if (decodedJSON.data) { //ma wáaĞciwoĞü data, a wiĊc przyjmujemy, Īe jest to lista Graph var graphList:GraphList = new GraphList(); var childGraphObject:GraphObject; for each (var childObject:Object in decodedJSON.data) { childGraphObject = new GraphObject(); for (var childKey:String in childObject) { childGraphObject[childKey] = childObject[childKey]; } graphList.addToList(childGraphObject); } graphList.paging = decodedJSON.paging; } Na zakoñczenie przekazujemy instancjÚ GraphList do metody renderGraphList(): if (decodedJSON.data) { //ma wáaĞciwoĞü data, a wiĊc przyjmujemy, Īe jest to lista Graph var graphList:GraphList = new GraphList(); 48 Rozdziaá 2. • Witaj w Graphie var childGraphObject:GraphObject; for each (var childObject:Object in decodedJSON.data) { childGraphObject = new GraphObject(); for (var childKey:String in childObject) { childGraphObject[childKey] = childObject[childKey]; } graphList.addToList(childGraphObject); } graphList.paging = decodedJSON.paging; this.renderGraphList(graphList); } Skompiluj i przetestuj SWF. Rezultat pokazany zostaï na rysunku poniĝej. Jest to okno (moĝna je przewijaÊ) zawierajÈce wszystkie obiekty Graph z list. Co stanie siÚ, kiedy klikniesz przycisk Pop Out (wyskocz) poniĝej obiektu Graph? (Patrz pierwszy rysunek na nastÚpnej stronie). Co siÚ zdarzyïo? Obiekt Graph zostaje wyĂwietlony we wïasnym rendererze obiektu Graph z szarÈ liniÈ ïÈczÈcÈ go z odpowiedniÈ pozycjÈ na liĂcie. DziÚki temu moĝna obejrzeÊ kilka pozycji listy jednoczeĂnie (patrz drugi rysunek na nastÚpnej stronie). (Moĝesz przeciÈgaÊ poszczególne renderery lub przeciÈgaÊ tïo, aby przesunÈÊ wszystko naraz). Staje siÚ jasne, ĝe lista Graph jest tylko kolekcjÈ obiektów Graph. 49 Facebook Graph API. Tworzenie rozbudowanych rozwiązaĔ we Flashu Renderowanie poïÈczeñ Pokazaïem poïÈczenia biegnÈce od list Graph do obiektów Graph, kolejnym krokiem bÚdzie ukazanie poïÈczeñ od obiektów Graph do list Graph. 50 Rozdziaá 2. • Witaj w Graphie Czas zaczÈÊ dziaïaÊ — wyĂwietlanie poïÈczeñ obiektu Graph Renderer obiektu Graph moĝe pokazaÊ listÚ wszystkich poïÈczeñ obiektu, jeĂli lista ta jest doïÈczona do obiektu Graph. Musisz tylko z Graph API wydobyÊ tÚ listÚ razem z ĝÈdanym obiektem Graph. Nasz kod tworzy instancjÚ GraphObject ze strukturÈ JSON, kopiujÈc wszystkie wïaĂciwoĂci JSON do GraphObject, a wiÚc te metadane zostanÈ doïÈczone. Musisz tylko dodaÊ flagÚ metadata=1 na koñcu Graph URL, którego ĝÈdamy, a kod zrobi caïÈ resztÚ. Moĝesz to zrobiÊ, zmieniajÈc kod ĝÈdania, tak jak we fragmencie poniĝej: public function CustomGraphContainerController(a_graphControlContainer: ´GraphControlContainer) { super(a_graphControlContainer); var loader:URLLoader = new URLLoader(); var request:URLRequest = new URLRequest(); //wskaĪ, który Graph URL zaáadowaü request.url = https://graph.facebook.com/PacktPub?metadata=1 ; loader.addEventListener(Event.COMPLETE, onGraphDataLoadComplete); //rozpocznij wáaĞciwy proces áadowania loader.load(request); } Istnieje jednak bardziej elegancki sposób zrobienia tego samego — za pomocÈ klasy URLVariables. W CustomGraphContainerController.as dodaj liniÚ importujÈcÈ tÚ klasÚ: import flash.net.URLVariables; NastÚpnie zmodyfikuj konstruktor, tak jak poniĝej: public function CustomGraphContainerController(a_graphControlContainer: ´GraphControlContainer) { super(a_graphControlContainer); var loader:URLLoader = new URLLoader(); var request:URLRequest = new URLRequest(); var variables:URLVariables = new URLVariables(); //wskaĪ, który Graph URL zaáadowaü request.url = https://graph.facebook.com/PacktPub ; variables.metadata = 1; request.data = variables; loader.addEventListener(Event.COMPLETE, onGraphDataLoadComplete); 51 Facebook Graph API. Tworzenie rozbudowanych rozwiązaĔ we Flashu //rozpocznij wáaĞciwy proces áadowania loader.load(request); } Jak najprawdopodobniej domyĂliïeĂ siÚ, ustawienie variables.metadata = 1 jest dokïadnie tym samym, co doklejenie ?metadata=1 na koñcu adresu URL. RozwiÈzanie wymaga kilku do- datkowych linii, ale znaczÈco uïatwia ustawianie róĝnych parametrów oraz pozwala oddzieliÊ je od URL. Skompiluj SWF; powinieneĂ uzyskaÊ nastÚpujÈcy efekt. Czy zauwaĝyïeĂ nowy przycisk Connections (poïÈczenia) w dolnej czÚĂci renderera? Kliknij przycisk Show (pokaĝ). 52 Rozdziaá 2. • Witaj w Graphie Co siÚ zdarzyïo? Moĝesz teraz zobaczyÊ wszystkie poïÈczenia obiektu Graph w jego rendererze. OczywiĂcie, nie jest to szczególnie interesujÈce, chyba ĝe postanowisz zobaczyÊ, co jest na drugim koñcu poïÈczenia! Obiekty ĝÈdajÈce Najlepiej byïoby, gdyby po klikniÚciu przez uĝytkownika poïÈczenia na liĂcie przewijanej po- wstaï i zostaï wyĂwietlony nowy renderer listy Graph dla tego poïÈczenia. Aby to osiÈgnÈÊ, dodamy do listy detektor zdarzenia MouseEvent.CLICK i uĝyjemy go do wy- woïania nowego ĝÈdania URLLoader dla klikniÚtego poïÈczenia. Nas szczÚĂcie, kod UI zostaï juĝ doïÈczony do projektu; musimy tylko z niego skorzystaÊ. W tym celu uĝyjemy czegoĂ, co nazywam obiektem ĝÈdajÈcym (ang. requestor). Czas zaczÈÊ dziaïaÊ — tworzenie obiektu ĝÈdajÈcego HTTP Celem naszego dziaïania jest przesuniÚcie caïego kodu odnoszÈcego siÚ do URLLoader z Custom ´GraphContainerController do oddzielnej klasy HTTPRequestor. Póěniej zastÈpimy konstruktor CustomGraphContainerController nastÚpujÈcym: public function CustomGraphContainerController(a_graphControlContainer: ´GraphControlContainer) { super(a_graphControlContainer); _requestor = new HTTPRequestor(); _requestor.request(new GraphRequest( PacktPub )); } Po co? No cóĝ, poza utworzeniem bardziej eleganckiego kodu, istniejÈ jeszcze dwie istotne korzyĂci. 1. O wiele ïatwiej bÚdzie zaĝÈdaÊ kilku obiektów Graph lub list Graph; nie bÚdzie trzeba tworzyÊ kilku instancji URLLoader. 2. W nastÚpnym rozdziale zobaczysz, jak uĝywaÊ oficjalnego Adobe ActionScript 3 SDK for Facebook Platform do pobierania informacji z Graph API. JeĂli kod ĝÈdania zostanie wydzielony w jednej klasie, bÚdziesz musiaï zmieniÊ tylko jednÈ liniÚ, aby skorzystaÊ z SDK zamiast HTTP: public function CustomGraphContainerController(a_graphControlContainer: ´GraphControlContainer) { 53 Facebook Graph API. Tworzenie rozbudowanych rozwiązaĔ we Flashu super(a_graphControlContainer); _requestor = new SDKRequestor(); _requestor.request(new GraphRequest( PacktPub )); } GraphRequest jest prostÈ klasÈ. Jej konstruktor umoĝliwia uĝycie dwóch parametrów do wskazania, co chcesz pobraÊ z Graph API: x objectID, nazwa dowolnego obiektu Graph, x connectionID, nazwa dowolnego poïÈczenia z tym obiektem Graph. Aby zaĝÈdaÊ strony Packt Publishing, uĝyjemy GraphRequest: newGraphRequest( PacktPub ); Gdy zaĝÈdamy listy postów ze strony Packt Publishing, uĝyjemy nastÚpujÈcego kodu: newGraphRequest( PacktPub , posts ); Klasa zostaïa juĝ napisana i znajduje siÚ w srcgraphapishttpHTTPRequestor.as. Obejrzyj jÈ! Istnieje w niej kilka zmian w porównaniu z kodem napisanym dla CustomGraphContainer ´Controller.as, ale wszystkie zostaïy wyjaĂnione w komentarzach: package graph.apis.http { import events.DialogEvent; import events.RequestEvent; import flash.events.Event; import flash.events.EventDispatcher; import flash.events.HTTPStatusEvent; import flash.events.IEventDispatcher; import flash.events.IOErrorEvent; import flash.net.URLLoader; import flash.net.URLRequest; import flash.net.URLVariables; import flash.utils.Dictionary; import graph.apis.base.IRequestor; import graph.BaseGraphItem; import graph.GraphList; import graph.GraphObject; import graph.GraphRequest; import com.adobe.serialization.json.JSON; //klasa musi wywoáywaü zdarzenia (przeglądają kod, zobaczysz dlaczego) public class HTTPRequestor extends EventDispatcher implements IRequestor { //sáuĪy do ustalania, który GraphRequest utworzyá okreĞlony //URLLoader private var _requests:Dictionary = new Dictionary(); public function HTTPRequestor(target:IEventDispatcher = null) 54 Rozdziaá 2. • Witaj w Graphie { //jest potrzebne, poniewaĪ klasa rozszerza EventDispatcher super(target); } public function request(a_request:GraphRequest):void { var loader:URLLoader = new URLLoader(); var urlRequest:URLRequest = new URLRequest(); var variables:URLVariables = new URLVariables(); //tworzymy URL z parametrów GraphRequest urlRequest.url = https://graph.facebook.com/ + a_request.objectID; if (a_request.connectionID) { urlRequest.url += / + a_request.connectionID; } variables.metadata = 1; urlRequest.data = variables; //sáuĪy do ustalania, który GraphRequest utworzyá okreĞlony //URLLoader w czasie dalszego dziaáania _requests[loader] = a_request; loader.addEventListener(Event.COMPLETE, onGraphDataLoadComplete); loader.load(urlRequest); } private function onGraphDataLoadComplete(a_event:Event):void { var loader:URLLoader = a_event.target as URLLoader; var graphData:String = loader.data; var decodedJSON:Object = JSON.decode(graphData); //znajdujemy oryginalny GraphRequest uĪyty do utworzenia URLLoader var originalRequest:GraphRequest = _requests[loader] as GraphRequest; if (decodedJSON.data) { var graphList:GraphList = new GraphList(); var childGraphObject:GraphObject; for each (var childObject:Object in decodedJSON.data) { childGraphObject = new GraphObject(); for (var childKey:String in childObject) { childGraphObject[childKey] = childObject[childKey]; } graphList.addToList(childGraphObject); } graphList.paging = decodedJSON.paging; //uĪywamy wáaĞciwoĞci oryginalnego GraphRequest do dodania 55 Facebook Graph API. Tworzenie rozbudowanych rozwiązaĔ we Flashu //kilku danych do samej graphList graphList.ownerID = originalRequest.objectID; graphList.connectionType = originalRequest.connectionID; //ta klasa nie ma metody renderGraphList(), //a wiĊc wywoáujemy zdarzenie, które CustomGraphContainerController //bĊdzie wykrywaá i wywoáa wáasną metodĊ renderGraphList() dispatchEvent(new RequestEvent(RequestEvent.REQUEST_COMPLETED, ´graphList)); } else { var graphObject:GraphObject = new GraphObject(); for (var key:String in decodedJSON) { graphObject[key] = decodedJSON[key]; } //ta klasa nie ma metody renderGraphList(), //a wiĊc wywoáujemy zdarzenie, które CustomGraphContainerController //bĊdzie wykrywaá i wywoáa wáasną metodĊ renderGraphList() dispatchEvent(new RequestEvent(RequestEvent.REQUEST_COMPLETED, ´graphObject)); } } } } Nie musisz zmieniaÊ istniejÈcego kodu ani nawet rozumieÊ go, wyjÈtek stanowi kod ĝÈdania HTTP, który zostaï napisany wczeĂniej. PamiÚtaj, ĝe jego celem jest enkapsulacja ĝÈdañ do Graph API. Teraz wróÊ do CustomGraphContainerController.as i usuñ caïy kod zwiÈzany z ĝÈdaniem: package controllers { import ui.GraphControlContainer; public class CustomGraphContainerController extends GCController { public function CustomGraphContainerController(a_graphControlContainer: ´GraphControlContainer) { super(a_graphControlContainer); } } } CustomGraphContainerController dziedziczy zmiennÈ typu protected o nazwie _requestor po klasie IRequestor, a takĝe metodÚ sïuĝÈcÈ do dodawania potrzebnych detektorów zdarzeñ, pozo- staje wiÚc wprowadzenie tylko nastÚpujÈcych zmian: 56 Rozdziaá 2. • Witaj w Graphie package controllers { import graph.apis.http.HTTPRequestor; import graph.GraphRequest; import ui.GraphControlContainer; public class CustomGraphContainerController extends GCController { public function CustomGraphContainerController(a_graphControlContainer: ´GraphControlContainer) { super(a_graphControlContainer); _requestor = new HTTPRequestor(); addEventListenersToRequestor(); _requestor.request(new GraphRequest( PacktPub )); } } } Skompiluj i uruchom SWF, rozwiñ pole Connections (poïÈczenia) i kliknij posts (posty). Doskonale! Pojawiï siÚ renderer listy Graph, czarna linia ïÈczÈca listÚ ze stronÈ wskazuje, ĝe istnieje pomiÚdzy nimi poïÈczenie. Co z innymi poïÈczeniami? Spróbuj kliknÈÊ statuses (in- formacje o statusach). Error #2044: Unhandled ioError:.text=Error #2032: Stream Error. URL:https://graph.facebook.com/204603129458/statuses?metadata=1 Niedobrze. 57 Facebook Graph API. Tworzenie rozbudowanych rozwiązaĔ we Flashu Co siÚ zdarzyïo? JeĂli wpiszesz kïopotliwy URL w przeglÈdarce (https://graph.facebook.com/packtpub/statuses), zobaczysz nastÚpujÈcy komunikat: { error : { type : OAuthAccessTokenException , message : An access token is required to request this resource. } } BïÈd wystÈpiï, poniewaĝ nie byïeĂ zalogowany na Facebooku ze swojego SWF. W nastÚpnym rozdziale piszÚ, jak rozwiÈzaÊ ten problem. Na razie moĝesz obejĂÊ bïÈd, dodajÈc detektor zdarzenia IO_ERROR do URLLoader. W HTTPRequestor.as zmodyfikuj metodÚ request(): public function request(a_request:GraphRequest):void { var loader:URLLoader = new URLLoader(); var urlRequest:URLRequest = new URLRequest(); var variables:URLVariables = new URLVariables(); //tworzymy URL z parametrów GraphRequest urlRequest.url = https://graph.facebook.com/ + a_request.objectID; if (a_request.connectionID) { urlRequest.url += / + a_request.connectionID; } variables.metadata = 1; urlRequest.data = variables; //sáuĪy do ustalania, który GraphRequest utworzyá okreĞlony //URLLoader w czasie dalszego dziaáania _requests[loader] = a_request; loader. addEventListener(IOErrorEvent.IO_ERROR, onIOError); loader.load(urlRequest); } Musisz zaimportowaÊ klasÚ flash.events.IOErrorEvent. NastÚpnie w tej samej klasie utwórz prostÈ funkcjÚ obsïugujÈcÈ zdarzenie, aby wyĂwietliÊ zawartoĂÊ bïÚdu: private function onIOError(a_event:IOErrorEvent):void { trace(a_event.text); } W ten sposób zobaczysz informacjÚ o bïÚdzie w oknie wyjĂcia, ale bïÈd nie spowoduje zawieszenia SWF. Uwaga: blok try catch nie bÚdzie dziaïaï dla bïÚdu tego rodzaju. 58 Rozdziaá 2. • Witaj w Graphie PoïÈczenia poïÈczeñ Przyjrzyj siÚ rendererowi listy Graph utworzonemu po klikniÚciu poïÈczenia albums. Czy czegoĂ brakuje? Brakuje zdjÚÊ! Po wczytaniu strony Packt Publishing na Facebooku moĝemy zobaczyÊ duĝo zdjÚÊ, ale tutaj nie ma dla nich adresów URL. Sprawdě to poprzez zaïadowanie listy Graph w przeglÈ- darce; nawet z flagÈ ?metadata=1 nic nie wskazuje, gdzie mogÈ byÊ zdjÚcia: { data : [ { id : 471535759458 , from : { name : Packt Publishing , category : Products_other , id : 204603129458 }, name : Profile pictures , link : http://www.facebook.com/album.php?aid=280961 id=204603129458 , count : 1, type : profile , created_time : 2010-09-30T10:13:53+0000 , updated_time : 2010-03-18T14:46:50+0000 }, 59 Facebook Graph API. Tworzenie rozbudowanych rozwiązaĔ we Flashu { id : 307932939458 , from : { name : Packt Publishing , category : Products_other , id : 204603129458 }, name : Books , description : Packt Books , link : http://www.facebook.com/album.php?aid=180619 id=204603129458 , count : 32, type : normal , created_time : 2010-02-04T12:32:17+0000 , updated_time : 2010-03-18T16:08:42+0000 } ], paging : { previous : https://graph.facebook.com/204603129458/ albums?metadata=1 limit=25 since=2010-09-30T10 3A13 3A53 2B0000 , next : https://graph.facebook.com/204603129458/ albums?metadata=1 limit=25 until=2010-02-04T12 3A32 3A16 2B0000 } } Czas zaczÈÊ dziaïaÊ — ïadowanie zdjÚÊ z albumu ZobaczyïeĂ jednak, ĝe kaĝdy obiekt wewnÈtrz tablicy data jest obiektem Graph. Przyjrzyj siÚ al- bumowi Packt Books (ma ID 307932939458) poprzez wpisanie w przeglÈdarce https://graph.face book.com/307932939458?metadata=1: { id : 307932939458 , from : { name : Packt Publishing , category : Products_other , id : 204603129458 }, name : Books , description : Packt Books , link : http://www.facebook.com/album.php?aid=180619 id=204603129458 , count : 32, type : album , created_time : 2010-02-04T12:32:17+0000 , updated_time : 2010-03-18T16:08:42+0000 , metadata : { 60 Rozdziaá 2. • Witaj w Graphie connections : { photos : https://graph.facebook.com/307932939458/photos , likes : https://graph.facebook.com/307932939458/likes , comments : https://graph.facebook.com/307932939458/comments }, } } Tym razem metadane podaïy potrzebne informacje. ZdjÚcia poïÈczone sÈ z obiektem Graph album za pomocÈ poïÈczenia photos. Uruchom SWF i ponownie zaïaduj poïÈczenie albums. W rendererze przejdě do obiektu Graph o nazwie Books i kliknij Pop Out. NastÚpnie rozwiñ pole Connections renderera Books i kliknij photos. Co siÚ zdarzyïo? Kiedy braliĂmy pod uwagÚ wyïÈcznie poïÈczenie posts, nasz graf byï bardzo prosty: pomiÚdzy stronÈ i kaĝdym elementem z niÈ zwiÈzanym istniaïo tylko jedno poïÈczenie. 61 Facebook Graph API. Tworzenie rozbudowanych rozwiązaĔ we Flashu Teraz, kiedy dodaliĂmy poïÈczenie albums, wszystko staïo siÚ bardziej skomplikowane. Musimy przemieszczaÊ siÚ po dwóch poziomach poïÈczeñ, aby przejĂÊ od strony do obiektów, których szukamy. To nie koniec poïÈczeñ. Zarówno albums, jak i photos mogÈ ïÈczyÊ siÚ z comments. 62 Rozdziaá 2. • Witaj w Graphie Poza tym, kaĝdy komentarz ma wïaĂciwoĂÊ from, która ïÈczy go z uĝytkownikiem bÚdÈcym jego autorem. Uĝytkownik moĝe byÊ takĝe „oznaczony” jako pojawiajÈcy siÚ na zdjÚciu, co ïÈczy zdjÚ- cie z uĝytkownikiem. Diagram sprawia wraĝenie coraz bardziej skomplikowanego (podobieñstwo do matematycz- nego grafu jest juĝ ïatwo dostrzegalne). OczywiĂcie teraz, kiedy mamy do czynienia z wieloma luděmi, liczba poïÈczeñ staje siÚ ogromna. Uĝytkownicy mogÈ byÊ poïÈczeni z dowolnym in- nym obiektem poprzez bycie znajomym innego uĝytkownika, oznaczenie na zdjÚciu, wideo lub notatce, poprzez zamieszczanie komentarza, ïÈcza lub innego elementu lub klikniÚcie LubiÚ to! dla dowolnego innego elementu na Facebooku. 63 Facebook Graph API. Tworzenie rozbudowanych rozwiązaĔ we Flashu JeĂli rozpoczniesz od okreĂlonej strony i przejdziesz przez wszystkie obiekty, z którymi jest poïÈczona, a nastÚpnie przez poïÈczone z tymi obiektami kolejne i tak dalej, bÚdziesz mógï przejĂÊ przez ogromnÈ liczbÚ wierzchoïków bez koniecznoĂci zaczynania na nowej stronie. SiïÈ Graphu jest elastycznoĂÊ. Kaĝdy rodzaj obiektu Graph ma takÈ samÈ strukturÚ jak kaĝdy inny, z wyjÈtkiem list Graph, które mogÈ zawieraÊ tablice obiektów Graph. WïaĂnie dlatego nasz renderer obiektów Graph moĝe ïatwo wyĂwietlaÊ dowolny rodzaj obiektu Graph. Na pewno zauwaĝyïeĂ, ĝe nie tylko komentarze majÈ wïaĂciwoĂÊ from? MajÈ jÈ takĝe albumy, pojedyncze zdjÚcia i niemal wszystkie rodzaje obiektów, które nie sÈ stronÈ lub uĝytkowni- kiem. Oznacza to, ĝe moĝesz zaczÈÊ od dowolnego obiektu, znaleěÊ jego twórcÚ i przesuwaÊ siÚ coraz dalej na zewnÈtrz po grafie z tego punktu. Model Graphu ma okreĂlone skutki dotyczÈce prywatnoĂci. PrzypuĂÊmy, ĝe otrzymaliĂmy do- stÚp do informacji o stronie, dziÚki czemu bÚdziemy mieli dostÚp do informacji o dowolnym obiekcie na tej stronie. W takim przypadku bÚdziemy mogli przejĂÊ z tej strony: Q do albumu umieszczonego na tej stronie i dalej, Q do zdjÚcia w tym albumie i dalej, Q do uĝytkownika oznaczonego na tym zdjÚciu i dalej, Q do listy postów na tablicy tego uĝytkownika i dalej, Q do komentarza do jednego z tych postów umieszczonego przez znajomego pierwszego uĝytkownika i dalej, Q do uĝytkownika, który zamieĂciï ten komentarz, i dalej, Q do programu TV, który ten uĝytkownik lubi, i dalej, Q do ïÈcza umieszczonego na stronie tego programu TV i dalej, Q do uĝytkownika, który umieĂciï to ïÈcze. 64 Rozdziaá 2. • Witaj w Graphie I tak dalej. Nic dziwnego, ĝe Facebook korzysta z bardzo szczegóïowego zestawu reguï okre- ĂlajÈcego zarówno to, do czego moĝe mieÊ dostÚp uĝytkownik, jak i to, do czego moĝe mieÊ dostÚp dziaïajÈca w jego imieniu aplikacja. Reguïy te objaĂniÚ w kolejnym rozdziale. Wszystko razem Na zakoñczenie zobaczymy, jak daleko moĝemy przejĂÊ po grafie, zaczynajÈc od strony Packt Publishing. Czas zaczÈÊ dziaïaÊ — przemieszczanie siÚ w Graph Ustaw aplikacjÚ Visualizer tak, aby ĝÈdaïa strony PacktPub. NastÚpnie skompiluj i uruchom SWF, uĝyj pola Connections (poïÈczenia) i przycisków Pop Out (wyskocz) do obejrzenia Graphu — zobacz, jak daleko moĝesz dojĂÊ. Nie zapomnij, ĝe moĝesz przeciÈgaÊ renderery i zmniejszaÊ widok, aby zmieĂciÊ ich wiÚcej w oknie odtwarzacza Flash Player! PamiÚtaj, ĝe czarne linie oznaczajÈ poïÈczenia, a szare, ĝe obiekt naleĝy do listy. Na rysunku niĝej pokazano, jak moĝe wyglÈdaÊ aplikacja po kilku klikniÚciach. 65 Facebook Graph API. Tworzenie rozbudowanych rozwiązaĔ we Flashu Moĝna juĝ dostrzec podobieñstwo do rozbudowanych diagramów grafu pokazanych wcze- Ăniej w tym rozdziale. Co siÚ zdarzyïo? NapisaïeĂ kod dla RIA, który pozwala na badanie caïego
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Facebook Graph API. Tworzenie rozbudowanych rozwiązań we Flashu
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: