Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ

Kërkesa e parë për api. Qasja e saktë për të përdorur API Vkontakte

Hapat e parë janë shumë të thjeshtë: krijoni një depo dhe inicializoni një perlë të thjeshtë në të. Një gur i çmuar i ri mund të krijohet me komandën gem_name të paketës dhe një depo mund të krijohet në Github. Këtu është, meqë ra fjala: https://github.com/Fodoj/groovehq.

Para së gjithash, unë do të shtoj aftësinë për të vërtetuar kërkesat në API GrooveHQ dhe më pas do të shkruaj një minimum kodi i kërkuar për të marrë një listë të të gjitha biletave. Për fat të mirë, dokumentacioni për API-në e këtij shërbimi është i detajuar dhe i kuptueshëm, ndaj bërja e një kërkese GET nuk do të jetë e vështirë.

Klienti minimal

Do të filloj duke shkruar një GrooveHQ të vogël :: Klasa e klientit që do të jetë përgjegjëse për bërjen e kërkesave API. Konstruktori i kësaj klase do të marrë shenjë e hyrjes.

# ./lib/groovehq/client.rb moduli GrooveHQ Klasa Client Def inicializimi (token_akses = zero) @access_token = hyrje_token || ENV ["GROOVEHQ_ACCESS_TOKEN"] fundi i fundit

Si të hyni në API

Tani duhet të kuptojmë se si të hyjmë në API. Deri në këtë pikë, nuk e kam përdorur kurrë perlë httparty për të bërë kërkesa. Përvoja ime është e kufizuar në bibliotekat RestClient dhe Faraday. Nuk mendoj se ka një ndryshim i madh cilën bibliotekë të përdor, por për ta bërë procesin më interesant do të zgjedh httparty. Për më tepër, ai ka shumë yje në GitHub :)

Në fakt, e urrej Faradein.

Unë shtoj rreshtin e mëposhtëm te groovehq.gemspec:

# ./groovehq.gemspec # ... spec. add_dependency "httparty" # ...

dhe ekzekutoni instalimin e paketës. Mbetet vetëm për të lidhur httparty brenda. / Lib / groovehq.rb:

Bërja e kërkesës së parë API

Për të kontrolluar që gjithçka po funksionon siç pritej, do të shtoj një metodë perform_request që do të marrë rrugën drejt pikës API dhe do të kthejë JSON me rezultatin e kërkesës. Për autorizim, unë do të përdor titullin HTTP të Autorizimit, siç tregohet në dokumentacionin API. Nuk më pëlqen opsioni me parametrin e pyetjes, pasi nuk do të funksionojë për kërkesat POST.

# ./lib/groovehq/client.rb # ... def perform_request (rruga) url = "https://api.groovehq.com/v1/ # (rruga)" përgjigje = HTTParty. merrni (url, titujt: ("Autorizimi" => "Bartësi # (@access_token)")) JSON. analizoj (përgjigje. trup) fundi # ...

Le të kontrollojmë nëse gjithçka funksionon ashtu siç duhet duke ekzekutuar komandën exec irb të paketës në dosjen gem. Pastaj ne ekzekutojmë pjesët e mëposhtme të kodit një nga një:

kerkoj "./lib/groovehq.rb" klient = GrooveHQ :: Klient. klient i ri ("token_access_your"). perform_request ("unë") # Unë zakonisht është përgjegjës për kthimin e të dhënave në lidhje me pronarin e tokenit

Si rezultat, nëse përdoret kodi i duhur i hyrjes, do të merrni një hash të diçkaje të tillë në tastierë:

("agjent" => ("email" => " [email i mbrojtur]"," first_name "=>" Kirill "," last_name "=>" Shirinkin "," href "=> "https://api.groovehq.com/v1/agents/ [email i mbrojtur]" , "links" => ("biletat" => ("href" => "https://api.groovehq.com/v1/tickets?assignee=fodojyko%40gmail.com" } } } }

Duket se kemi një version minimal pune të perlës! Komiteti me ndryshimet është këtu: f7d9eef.

Metoda #perform_request u krijua për asgjë më shumë se korrigjimin e gabimeve, kështu që nuk përmban më krijimi i saktë vargje-lidhje.

Shtimi i strukturës

Ç'pritet më tej?

Detyra ime e ardhshme do të jetë të shtoj sa më shumë burime të jetë e mundur duke ndjekur dokumentacionin API. Për problemet me të cilat do të përballem në proces - në artikullin tjetër.

Një shembull i një kërkese API që kthen 20 ngjarjet më të afërta në Moskë dhe Shën Petersburg:

https://api.timepad.ru/v1/events.json?limit=20&skip=0&cities=Moscow,Sankt-Petersburg&fields=location&sort=+starts_at

Le ta analizojmë në pjesë.

https: // - qasja në API është e mundur vetëm përmes https, kur përpiqeni të merrni të dhëna përmes http, shfaqet një gabim 400. Kjo ju lejon të garantoni integritetin e të dhënave dhe të parandaloni transferimin e çdo informacioni të ndjeshëm në formë të pakriptuar.

api.timepad.ru/v1 - API Timepad ndodhet në një domen të veçantë, versioni është i integruar në adresë. Kjo është bërë në mënyrë që nëse v2 shfaqet ndonjëherë, kalimi në të do të jetë opsional dhe versioni i parë do të vazhdojë të funksionojë për aq kohë sa ka klientë.

/ ngjarjet është një burim ngjarjesh, një nga burimet kryesore të API. Me të, ju mund të përdorni bazën e të dhënave të leksioneve, seminareve, koncerteve, konferencave, mbledhjeve dhe takimeve të mbajtura përmes Timepad-it, duke filtruar në një nga disa dhjetëra mënyra të mundshme.

Json - një tregues i formatit të dëshiruar të të dhënave. Json dhe html janë të mbështetur. Nëse nuk specifikohet asgjë, API zbulon automatikisht formatin: html në shfletues, json në të gjitha rastet e tjera.

& sort = + starts_at - renditja sipas datës së ngjarjes fillon në rend rritës. Është gjithashtu e mundur të renditet sipas disa parametrave të tjerë.

Zgjedhja e fushave për të shfaqur

API-ja e ngjarjes shfaq vetëm disa nga fushat e ngjarjeve më të përdorura: titullin, kategorinë, datën e fillimit, lidhjen, posterin.

Për të shfaqur fushat e tjera të ngjarjeve, duhet t'i specifikoni ato në parametrin e fushave të ndara me presje, për shembull:

Si rezultat i një kërkese të tillë përveç kësaj fushat e paracaktuar do të fusin gjithashtu një objekt të vendit të ngjarjes dhe një objekt të dhënash shtesë për statusin e regjistrimit për ngjarjen. Objektet e brendshme ose nuk shfaqet plotësisht, ose shfaqet plotësisht, fusha e fushave nuk ndikon në përmbajtjen e tyre.

Lista e fushave që mund të shfaqen mund të gjendet në dokumentacionin online të shënuar Fakultative si në pamjen e ekranit:

Renditja e vlerave

API Timepad mbështet renditjen sipas njërës prej fushave të mëposhtme:

emri
fillon_në
qytet
referer_përqind
krijuar_at
id

Emri i fushës së renditjes duhet të specifikohet në kërkesë, për shembull:

Për të renditur në rend zbritës, duhet të specifikoni - përpara emrit të fushës, për shembull:
https://api.timepad.ru/v1/events?sort=-id

Kur renditni në rend rritës, mund të tregoni opsionalisht një plus përpara emrit, për shembull,

Faqezim

Çdo listë në API është e ndarë në faqe. Ekzistojnë parametrat e mëposhtëm për t'i kontrolluar ato:

limit - numri i elementeve për t'u kthyer
kapërce - numri i artikujve për të kapërcyer

Kështu, për shembull, nëse merrni ngjarje me 10, kërkesat do të duken kështu:
https://api.timepad.ru/v1/events?limit=10
https://api.timepad.ru/v1/events?limit=10&skip=10
https://api.timepad.ru/v1/events?limit=10&skip=20
https://api.timepad.ru/v1/events?limit=10&skip=30
...
etj

Në këtë rast, përgjigja duket si kjo:

("gjithsej": "123", "vlera": [...])

Totali pasqyron numrin total të elementeve në përzgjedhje, dhe vlerat përmbajnë elementet që korrespondojnë me cilësimin e faqes.

Fushat bosh

API si parazgjedhje heq fushat me vlera boshe (vargje boshe, vija boshe, i pavlefshëm). Në rastin kur keni nevojë për vlera boshe, duhet të specifikoni parametrin show_empty_fields me vlerën e vërtetë

Përshëndetje, Habr!

Në një kohë, duke lundruar në internet për përdorimin racional të API-së Vkontakte, nuk mund të gjeja diçka të kuptueshme, të vetmet biblioteka që gjeta u zbatuan pa përdorur ndonjë praktikë të pranuar përgjithësisht dhe pa kod i bukur... Vendosa ta korrigjoj këtë keqkuptim dhe shkrova bibliotekën time për të punuar me Vkontakte API.
Detaje të gjalla dhe qasje nën habrakat.

Kështu ndodhi që Vk API të zbatohet mjaft mirë, me përjashtim të disa pikave jo logjike, të cilat do t'i përmend më vonë. Por sot nuk po flasim për cilësi, por për një aplikim specifik.

Menjëherë është e nevojshme të bëni një rezervim, përveç përshkrimit, do të sjell në bibliotekën time pjesë të kodit të punës, një lidhje të cilës do ta jap në fund të artikullit. Biblioteka funksionon në këtë të fundit version i qëndrueshëm 5.5, nëse i preni gjeneratorët nga marrja e grupit, atëherë duhet të funksionojë në 5.4.

  • Autorizimi i serverit (i ashtuquajturi autorizimi i faqes)
  • Autorizimi i klientit (i pavarur)
  • Autorizimi i serverit të aplikacionit
Më interesantet për zhvilluesin janë dy të parat. E para ju lejon të autorizoni një përdorues në sit dhe të merrni çelësin e tij të hyrjes, e dyta ju lejon të autorizoni aplikacionin tuaj, për shembull Dekstop ose Mobile. Duke parë përpara, opsioni i dytë na ofron mundësi të mëdha, dhe e para, vetëm një pjesë e vogël e tyre.

Algoritmi për marrjen në rastin e parë reduktohet në zbatimin e pikave të mëposhtme:

  • Ne shfaqim një lidhje për autorizimin e përdoruesit, të cilën e formatojmë në përputhje me dokumentacionin
  • Përdoruesi e ndjek atë dhe identifikohet
  • Përdoruesi ridrejtohet në REDIRECT_URI të aplikacionit tonë me kodin e parametrit GET
  • Aplikacioni ynë duhet të bëjë një kërkesë në API që përmban kodin për të marrë shenjën e aksesit të përdoruesit
  • API përgjigjet ose me një objekt që përmban shenjën e aksesit ose me një gabim.

Një shembull i kodit me të cilin mund ta krijoni këtë nuk është një biznes i ndërlikuar.

$ auth = getjump \ Vk \ Auth :: getInstance (); $ auth-> setAppId ("3470411") -> setScope ("SCOPE") -> setSecret ("KODI SEKRET") -> setRedirectUri ("http: //localhost/test.php"); $ shenjë = $ auth-> startCallback (); printf ("LINK", $ auth-> getUrl ());

Supozohet se domeni ynë është localhost dhe skedari aktual është test.php. Nëse gjithçka shkoi mirë, atëherë ndryshorja jonë e shenjës $ do të përmbajë çelësin e aksesit të përdoruesit që ka kaluar autorizimin.

Nga momenti që kemi një çelës aksesi, ne mund të performojmë Kërkesat API... Logjika e përgjithshme e kërkesës është e thjeshtë, ju kaloni një kërkesë të krijuar posaçërisht në URL-në API. Kërkesa duhet të përmbajë emrin e metodës dhe argumentet.

api.vk.com/method/METHOD_NAME?PARAMETERS&access_token=ACCESS_TOKEN

Lista e metodave, kjo është një nga gjërat e pasura në API. Në të, mund të gjeni metoda që nuk kërkojnë një çelës aksesi për punën e tyre, prandaj mund t'i telefononi pa marrë atë.

Kur përdorim një bibliotekë, duhet të krijojmë një objekt bazë, si ky:
$ vk = getjump \ Vk \ Core :: getInstance () -> apiVersion ("5.5") -> setToken (token $);

Disa pyetje shembuj duke përdorur bibliotekën:

Saktësisht 100 objekte që përmbajnë të dhëna të përdoruesit nga 1 në 100 do të kalojnë përmes funksionit anonim në secilin. Vini re se nëse heqim thirrjen e funksionit, nuk do të bëhet asnjë kërkesë, e gjitha sepse do të kthehet një objekt që ka metodat magjike __call dhe __get anashkalohen , që na lejon të bëjmë një kërkesë kur kemi vërtet nevojë për të.
$ vk-> kërkesë ("users.get", ["user_ids" => diapazoni (1, 100)]) -> secili (funksioni ($ i, $ v) (nëse ($ v-> mbiemri == "" ) ktheni; printoni $ v-> mbiemrin.
"; });

Një nga gjërat që na zbulon përdorimin e gjeneratorëve është marrja e grupeve. Kjo do të thotë, ne marrim të dhëna vetëm kur na duhen. Shembulli i mëposhtëm do të na lejojë të marrim TË GJITHA mesazhet tona, kërkesat për 100. Kini kujdes, metodë kërkon që ju të keni të drejta për mesazhe, Aplikacione të pavarura, i njëjti autorizim dhe, në përputhje me rrethanat, transferimi i çelësit të hyrjes.
foreach ($ vk-> kërkesë ("messages.get") -> grumbull (100) si të dhëna $) ($ të dhëna-> secili (funksion ($ i, $ m) (nëse (isset ($ m-> trupi) ) printoni $ m-> trupin. PHP_EOL;));)

Metoda e mirë e cila mund të gjendet në API - ekzekutuar... Ai merr një parametër kodi si argument, kodi është një lloj pseudo JavaScript që na lejon të ekzekutojmë kodin tonë në anën e serverit, dhe gjithashtu na lejon të ekzekutojmë procedurat e ruajtura që mund të krijojmë gjatë redaktimit të aplikacionit tonë.

Unë nuk mund ta shpërfillja këtë gjë dhe e zbatova në bibliotekë. Me pak fjalë, ju lejon të ekzekutoni pyetje të shumta si një. Shikoni shembulli tjetër kodi.

$ js1 = $ vk-> kërkesë ("messages.get", ["count" => 200, "offset" => 0 * 200]) -> toJs (); // Kthen një objekt të tipit VkJs $ js2 = $ vk-> kërkesë ("messages.get", ["count" => 200, "offset" => 1 * 200]) -> toJs (); $ js3 = $ vk-> kërkesë ("messages.get", ["count" => 200, "offset" => 2 * 200]) -> toJs (); $ js4 = $ vk-> kërkesë ("messages.get", ["count" => 200, "offset" => 3 * 200]) -> toJs (); $ js1 -> append ($ js2) // Ne shtojmë js2 në js1 -> append ($ js3) -> append ($ js4) -> ekzekutojmë () // Ne duam ta bëjmë këtë (në fakt kthen RequestTransaction) - > përgjigja // Kërkesa do të ekzekutohet vetëm tani -> secili (funksioni ($ i, $ v) // Funksioni i parë anonim nevojitet për të përshkuar të gjithë elementët e grupit të marrë nga ekzekutimi (një grup prej 4 elementësh, 4 kërkesa ) ($ v-> secili (funksioni ($ c, $ d) (// Tjetra për të kaluar nëpër të gjitha 200 mesazhet në çdo grup nëse (isset ($ d-> trup)) printoni $ d-> trupin; // Printoni një mesazh nëse një fushë e tillë është e pranishme));) );

Siç u premtua, një nga ato keqkuptimet që mund të hasni versioni aktual Metoda API (5.21).

Artikujt kryesorë të lidhur