1 / 41

PHPConf 2008 Kaunas

PHPConf 2008 Kaunas. Pasiimam duomenis iš trečiosios šalies šaltinių. Trumpai apie manę. Man 26 Su PHP dirbu 7 metus Taip pat galiu dirbti ir dirbu su: Ruby (RoR), Python, Java Per tą laiką teko dirbti 3 įmonėse Didžiausias ir sunkiausias projektas mano gyvenime: www.literotica.com

orien
Download Presentation

PHPConf 2008 Kaunas

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. PHPConf 2008 Kaunas Pasiimam duomenis iš trečiosios šalies šaltinių

  2. Trumpai apie manę • Man 26 • Su PHP dirbu 7 metus • Taip pat galiu dirbti ir dirbu su: Ruby (RoR), Python, Java • Per tą laiką teko dirbti 3 įmonėse • Didžiausias ir sunkiausias projektas mano gyvenime: www.literotica.com • Vadovai mano, kad aš esu visagalis

  3. Kodėl tai aktualu? • Tai tenka daryti vis dažniau • Šaltinių įvairovė vis didėja • Tai ne tik RSS ar kitas XML pavyzdys • Tai ne visada paremta standartais • Tai ne visada taip paprasta, kaip atrodo • Kur dar tai galima panaudoti

  4. Dažniausiai naudojame • readfile(<adresas>); • fopen(<adresas>); kartu su fpassthru() arba fread(); • file(<adresas>); • file_get_contents(<adresas>);

  5. Paprasčiausias pavyzdys • Tai paprasčiausias variantas įgyvendinimo atžvilgiu. • Tai prasčiausias variantas saugumo atžvilgiu, blogiau galėtų būti tik include(<adresas>);

  6. Paprastumas ne visada yra gerai • O jei šaltinis lėtai veikia? • O jei šaltinis išvis neveikia? • O jei šaltinį nulaužė? • O jei šaltinis pakeitė savo formatą? • Ar mes išnaudojome visas HTTP protokolo galimybes?

  7. Sudėtingesnis metodas • Jų nėra tiek daug • curl/libcurl • fsockopen/Stream functions • Zend Framework: Zend_Http_Client • exec() + wget • Jie sudėtingesni • Jie suteikia daugiau galimybių

  8. Kas tas curl? • curl – Client Url Library • Puikiai išvystyta biblioteka, skirta darbui su įvairias protokolais • Integruota į PHP (PHP plėtinys php_curl) • Turi daug įvairių nustatymų • Gali dirbti paraleliai su keliais adresais • Deja, išjungta pagal nutylėjimą

  9. curl pavyzdys

  10. curl pavyzdys (esminis kodas)

  11. Dar truputis apie curl • Visa informacija yra http://lt.php.net/curl • Būtinai susipažinkite su curl_setopt funkcija ir jos konstantomis • Pravartu žinoti apie curl_getinfofunkciją ir jos grąžinamą rezultatą • Jeigu darote daug užklausų į vieną tinklapį, patarčiau nustatyti padorų “User Agent”

  12. Fsockopen/Stream Functions • Pavadinimai kalba patys už save • Deja, neturiu patirties šioje srityje • Nes viską reikia kurti pačiam • O kai nėra reikalo tai daryti – tai neįdomu • Kam įdomų – daug informacijos yra adresu http://lt.php.net/fsockopen ir http://lt.php.net/stream

  13. Zend Framework - Zend_Http_Client • Puikus PHP karkasas • Daug naudingų modulių • Pagrindinis kūrėjas yra Zend • Zend pats kontroliuoja kodą • Galima naudot tik atskiras dalis ir nebūtinai tinklapio kūrimui

  14. Zend_Http_Client pavyzdys

  15. Zend_Http_Client (esminis kodas)

  16. Dar truputis apie Zend_Http_Client • Tai Zend Framework dalis • Ją naudoja kiti komponentai: visi, kas dirba su HTTP protokolu, todėl patartina ją mokėti naudotis • Naudoja Stream Functions: http://lt.php.net/stream • Galima sukurti savo adapterį

  17. Apie ką nenorėčiau kalbėti • Nenorėčiau kalbėti apie exec() + wget • Tai komandinės eilutės įrankis palaikant HTTP ir FTP protokolus • Su exec() tai neefektyvu • Tai nuobodu • Tai labai labai retai naudojama • Tai labiau skirta administratoriams • Galima taip naudoti ir kitą programinę įrangą

  18. Bet mes dar net nepriartėjome prie: • O jei šaltinis lėtai veikia? • O jei šaltinis išvis neveikia? • O jei šaltinį nulaužė? • O jei šaltinis pakeitė savo formatą? • Ar mes išnaudojome visas HTTP protokolo galimybes?

  19. O jei šaltinis lėtai veikia? • Jūsų tinklapis irgi lėtai veikia • Gali išmesti klaidą • Sprendimai: • “Kešuokite” duomenis • Atsisakykite užklausų generuojant tinklapį • Sumažinkite atsakymo į užklausą laukimo laiką iki minimumo

  20. O jei šaltinis išvis neveikia? • Jūsų tinklapis nieko nerodo, nebent klaidas • Kraunantis tikrai lėtai veikia (pauzė gali būti nuo 5 iki 60 sek.) • Sprendimai: • Jokių užklausų generuojant tinklapį • “Kešas”, “kešas”, “kešas”. • Pasenęs “kešas” netrinamas, kol sistema nėra įsitikinusi, kad naujas “kešas” yra sugeneruotas ir tinkamas • Pranešimai apie klaidas

  21. O jei šaltinį nulaužė? • Na, mano pavyzdys tikrai šiuo atvejų ... • Tikrinkite gautus duomenis: • Duomenų formatą: content-type (text/plain, text/xml, text/html) • Duomenų “vidų”: ar tikrai tai XML/TXT/HTML • Duomenų atitikimą reguliariems išreiškimams • Pranešimai apie klaidas

  22. O jei šaltinis pakeitė savo formatą? • Tai nebūtinai nulaužymas • Sistema turi būti tam paruošta • Protingas “kešo” naudojimas • Pranešimai apie klaidas vartotojams • Pranešimai apie klaidas kūrėjams • Tai atsitiks tada, kai Jus to visiškai nelauksite (iš patirties sakau)

  23. Naudojame visas HTTP galimybes? • HTTP yra puikus protokolas • Jis yra dokumentuotas (RFC 2616) • Žiūrim ką turim? • If-Modified-Since • If-Match • Cache-Control • Deja, tai priklauso ir nuo šaltinio

  24. GET /feed/ HTTP/1.1 Host: www.kurakin.info ... If-Modified-Since: Tue, 25 Mar 2008 18:19:12 GMT HTTP/1.x 304 Not Modified Date: Fri, 11 Apr 2008 18:52:55 GMT ... If-Modified-Since

  25. GET /feed/ HTTP/1.1 Host: kurakin.info ... If-None-Match: "a25432-3d9-47891f60" HTTP/1.x 304 Not Modified Date: Fri, 11 Apr 2008 18:57:13 GMT ... Etag: "a25432-3d9-47891f60" If-Match

  26. Cache-Control • Čia viskas nėra taip paprasta • Patariu pasidomėti HTTP 1.1 (RFC 2616) • Nepamirškite, kad “kešuoti” gali ir tarp Jūsų ir šaltinio esanti serveriai

  27. Šaltinių įvairovė • Kai aš pradėjau, buvo HTTP ir HTML • HTML buvo neteisingas (angl.: not valid), neatspėjamas ir buvo tik PCRE ar EREGI • Kartais naudojome paprastą tekstą ar serialize/unserialize

  28. Šaltinių įvairovė • Atsirado XML – pradėjome naudoti DOM, SipleXML • O dar RSS, ATOM, XML-RPC, SOAP ir kiti smagūs dalykai, API. • Dažnai jie visi remiasi HTTP protokolu

  29. Kai nesilaikoma standartų • Vis dar yra poreikis gauti informaciją iš HTML puslapių • Dažnai būna neteisingas kodas • Įrankiai: • String functions • PREG/EREGI functions • Tidy

  30. Tidy pavyzdys

  31. Kaip pasikeičia kodas

  32. Dar apie Tidy • Turi labai daug nustatymų: http://tidy.sourceforge.net/docs/quickref.html • Galime HTML kodą paversti į XHTML ar XML • Galime kodą išvalyti nuo šiukšlių • Galime pašalinti klaidas

  33. Taigi, jau turime standartą • Su standartais visi mokame dirbti • Vis dar lieka vietos PREG/EREGI • Jau galima naudoti DOM/SimpleXML • XPATH tampa mūsų draugu

  34. Pasiimkime valiutų kursus

  35. Pasiimkime duomenis

  36. Paverskime juos į XML UTF-8

  37. Pasinaudokime XPTAH

  38. Rezultatas • Aš tai daryčiau kartą per dieną • Tai daryčiau su “cron” pagalba • Taip, čia nėra patikrinimų kuriuos minėjau • Taip, juos turite kurti patys

  39. Kur galima panaudoti šias žinias • XML failų kaip informacijos šaltinio naudojimas • Įvairių API naudojimas • Mokėjimo sistemų integracija • Informacijos gavimas iš nestandartinių/nepritaikytų šaltinių • Mažių paieškos sistemų kūrimas

  40. Paprasta paieškos sistema • Tai visada atrodo nesudėtingai, kai pradedi • Parsisiunti puslapį • Įvertini turinį • Turini įdedi į indeksą • Sunkiausia – įvertinimo algoritmas

  41. Pabaiga • Ačiū! • Kontaktas: sergej@kurakin.info • Informacijos šaltiniai: • http://www.php.net/ • http://framework.zend.com/ • http://www.google.com/ • Kiti interneto tinklapiai • Klausimai?

More Related