Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Programi
  • Prvi zahtjev za api. Ispravan pristup korištenju Vkontakte API-ja

Prvi zahtjev za api. Ispravan pristup korištenju Vkontakte API-ja

Prvi koraci su vrlo jednostavni: kreirajte spremište i inicijalizirajte jednostavan dragulj u njemu. Novi dragulj se može kreirati naredbom bundle gem gem_name, a spremište se može kreirati na Githubu. Evo ga, usput: https://github.com/Fodoj/groovehq.

Prije svega, dodaću mogućnost provjere autentičnosti zahtjeva GrooveHQ API-ju, a zatim ću napisati minimalni potreban kod da dobijete listu svih karata. Na sreću, dokumentacija za API ovog servisa je detaljna i razumljiva, tako da neće biti teško napraviti jedan GET zahtjev.

Minimalni klijent

Počeću tako što ću napisati malu GrooveHQ :: Client klasu koja će biti odgovorna za izradu API zahteva. Konstruktor ove klase će uzeti pristupni token.

# ./lib/groovehq/client.rb modul GrooveHQ klasa Client def initialize (access_token = nil) @access_token = access_token || ENV ["GROOVEHQ_ACCESS_TOKEN"] kraj kraj kraj

Kako pristupiti API-ju

Sada moramo shvatiti kako pristupiti API-ju. Do ove tačke, nikada nisam koristio httpparty dragulj za postavljanje zahtjeva. Moje iskustvo je ograničeno na RestClient i Faraday biblioteke. Mislim da nema velika razlika koju biblioteku koristiti, ali da bi proces bio zanimljiviji odabrat ću httparty. Štaviše, on ima puno zvijezda na GitHubu :)

U stvari, mrzim Faradaya.

Dodajem sljedeći red u groovehq.gemspec:

# ./groovehq.gemspec # ... spec. add_dependency “httpparty” # ...

i pokrenite instalaciju paketa. Ostaje samo da povežete httpparty unutra. / Lib / groovehq.rb:

Pravljenje prvog API zahtjeva

Da provjerim da li sve radi kako se očekuje, dodaću metodu perform_request koja će uzeti putanju do API točke i vratiti JSON s rezultatom zahtjeva. Za autorizaciju ću koristiti HTTP zaglavlje autorizacije, kao što je navedeno u dokumentaciji API-ja. Ne sviđa mi se opcija sa parametrom upita, jer neće raditi za POST zahtjeve.

# ./lib/groovehq/client.rb # ... def perform_request (path) url = "https://api.groovehq.com/v1/ # (path)" odgovor = HTTParty. get (url, zaglavlja: ("Authorization" => "Nosilac # (@access_token)")) JSON. raščlaniti (odgovor. tijelo) kraj # ...

Provjerimo da li sve radi kako treba izvršavanjem naredbe bundle exec irb u folderu gem. Zatim izvršavamo sljedeće dijelove koda jedan po jedan:

zahtijevaju "./lib/groovehq.rb" client = GrooveHQ :: Klijent. novi ("vaš_access_token") klijent. perform_request ("ja") # me je obično odgovoran za vraćanje podataka o vlasniku tokena

Kao rezultat toga, ako se koristi ispravan token za pristup, dobićete hash nečeg poput ovoga u konzoli:

("agent" => ("email" => " [email protected]"," first_name "=>" Kirill "," prezime "=>" Shirinkin "," href "=> "https://api.groovehq.com/v1/agents/ [email protected]" , "links" => ("tickets" => ("href" => "https://api.groovehq.com/v1/tickets?assignee=fodojyko%40gmail.com" } } } }

Izgleda da imamo minimalnu radnu verziju dragulja! Urezivanje sa promjenama je ovdje: f7d9eef.

Metoda #perform_request kreirana je samo za otklanjanje grešaka, tako da ne sadrži više ispravna kreacija link-strings.

Dodavanje strukture

Šta je sledeće?

Moj sljedeći zadatak će biti da dodam što više resursa prateći API dokumentaciju. O problemima sa kojima ću se susresti u tom procesu - u sljedećem članku.

Primjer API zahtjeva koji vraća 20 najbližih događaja u Moskvi i Sankt Peterburgu:

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

Hajde da to analiziramo u delovima.

https: // - pristup API-ju je moguć samo preko https, pri pokušaju primanja podataka putem http prikazuje se greška 400. Ovo vam omogućava da jamčite integritet podataka i spriječite prijenos bilo kakvih osjetljivih informacija u nešifriranom obliku.

api.timepad.ru/v1 - Timepad API se nalazi na zasebnoj domeni, verzija verzija je ugrađena u adresu. Ovo je učinjeno tako da ako se v2 ikada pojavi, prijelaz na njega će biti opcionalan, a prva verzija će nastaviti funkcionirati sve dok ima klijente.

/ events je resurs događaja, jedan od glavnih API resursa. Pomoću njega možete pristupiti bazi predavanja, seminara, koncerata, konferencija, skupova i sastanaka održanih putem Timepad-a, filtrirajući na jedan od nekoliko desetina mogućih načina.

Json - indikacija željenog formata podataka. Podržani su Json i html. Ako ništa nije navedeno, API automatski detektuje format: html u pretraživaču, json u svim ostalim slučajevima.

& sort = + starts_at - sortiranje po datumu početka događaja uzlaznim redoslijedom. Također je moguće sortirati po nekoliko drugih parametara.

Odabir polja za prikaz

API događaja prikazuje samo neka od najčešće korištenih polja događaja: naslov, kategorija, datum početka, link, poster.

Da biste prikazali druga polja događaja, morate ih navesti u parametru polja odvojene zarezima, na primjer:

Kao rezultat takvog zahtjeva osim toga zadana polja će također umetnuti objekt mjesta održavanja događaja i dodatni objekt podataka o statusu registracije za događaj. Unutrašnji objekti ili potpuno nije prikazano, ili je potpuno prikazano, polje polja ne utiče na njihov sadržaj.

Spisak polja koja se mogu prikazati nalazi se u označenoj online dokumentaciji Opciono kao na snimku ekrana:

Sortiranje vrijednosti

Timepad API podržava sortiranje prema jednom od sljedećih polja:

ime
starts_at
grad
referrer_percent
created_at
id

Ime polja za sortiranje mora biti navedeno u zahtjevu, na primjer:

Da biste sortirali u opadajućem redoslijedu, potrebno je navesti - prije naziva polja, na primjer:
https://api.timepad.ru/v1/events?sort=-id

Prilikom sortiranja uzlaznim redoslijedom, opciono možete označiti plus ispred imena, na primjer,

Paginacija

Sve liste u API-ju podijeljene su na stranice. Postoje sljedeći parametri za njihovu kontrolu:

limit - broj elemenata za vraćanje
preskoči - broj stavki koje treba preskočiti

Tako, na primjer, ako primite događaje do 10, zahtjevi će izgledati ovako:
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
...
itd

U ovom slučaju, odgovor izgleda ovako:

("ukupno": "123", "vrijednosti": [...])

Ukupan broj odražava ukupan broj elemenata u odabiru, a vrijednosti sadrže elemente koji odgovaraju postavci paginacije.

Prazna polja

API prema zadanim postavkama uklanja polja s praznim vrijednostima (prazni nizovi, prazne linije, null). U slučaju kada su vam potrebne prazne vrijednosti, potrebno je navesti parametar show_empty_fields sa vrijednošću true

Zdravo, Habr!

Svojevremeno, surfajući Internetom radi racionalne upotrebe Vkontakte API-ja, nisam mogao pronaći nešto razumljivo, jedine biblioteke koje sam pronašao implementirane su bez korištenja bilo kakve općenito prihvaćene prakse i bez prelep kod... Odlučio sam da ispravim ovaj nesporazum i napisao sam svoju biblioteku za rad sa Vkontakte API-jem.
Živahni detalji i pristupi pod habrakatom.

Desilo se da je Vk API prilično dobro implementiran, sa izuzetkom nekih nelogičnih tačaka, koje ću spomenuti kasnije. Ali danas ne govorimo o kvaliteti, već o specifičnoj primjeni.

Odmah je potrebno izvršiti rezervaciju, osim opisa, u svoju biblioteku ću donijeti dijelove radnog koda, link do kojih ću dati na kraju članka. Biblioteka radi na potonjem stabilna verzija 5.5, ako isečete generatore iz paketnog prijema, onda bi trebao raditi na 5.4.

  • Autorizacija servera (tzv. autorizacija sajta)
  • Autorizacija klijenta (samostalno)
  • Autorizacija aplikacijskog servera
Najzanimljivija za programera su prva dva. Prvi vam omogućava da autorizirate korisnika na stranici i dobijete njegov pristupni ključ, drugi vam omogućava da autorizirate svoju aplikaciju, na primjer Dekstop ili Mobile. Gledajući unaprijed, pruža nam druga opcija ogromne mogućnosti, a prvi, samo mali dio njih.

Algoritam za dobijanje u prvom slučaju svodi se na implementaciju sljedećih tačaka:

  • Prikazujemo link za autorizaciju korisnika, koji formatiramo u skladu sa dokumentacijom
  • Korisnik ga prati i prijavljuje se
  • Korisnik se preusmjerava na REDIRECT_URI naše aplikacije sa GET kodom parametra
  • Naša aplikacija treba da uputi zahtjev API-ju koji sadrži kod kako bi dobila pristupni token korisnika
  • API odgovara ili objektom koji sadrži pristupni token ili greškom.

Primjer koda pomoću kojeg ovo možete pokrenuti nije težak posao.

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

Pretpostavlja se da je naš domen localhost, a trenutni fajl je test.php. Ako je sve prošlo dobro, onda će naša varijabla token $ sadržavati pristupni ključ korisnika koji je prošao autorizaciju.

Od trenutka kada imamo pristupni ključ, možemo raditi API zahtjevi... Opća logika zahtjeva je jednostavna, prosljeđujete posebno kreiran zahtjev na API URL. Zahtjev mora sadržavati ime metode i argumente.

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

Lista metoda, ovo je jedna od bogatih stvari u API-ju. U njemu možete pronaći metode koje ne zahtijevaju pristupni ključ za njihov rad, pa ih možete pozvati, a da ga ne dobijete.

Kada koristimo biblioteku, potrebno je da kreiramo osnovni objekat, ovako:
$ vk = getjump \ Vk \ Core :: getInstance () -> apiVersion ("5.5") -> setToken ($ token);

Nekoliko primjera upita koji koriste biblioteku:

Točno 100 objekata koji sadrže korisničke podatke od 1 do 100 će proći kroz anonimnu funkciju u svakom. Imajte na umu da ako uklonimo poziv funkcije, neće biti učinjen nikakav zahtjev, a sve zato što će biti vraćen objekt koji ima magične metode __call i __get nadjačane , što nam omogućava da uputimo zahtjev kada nam je zaista potreban.
$ vk-> zahtjev ("users.get", ["user_ids" => raspon (1, 100)]) -> svaki (funkcija ($ i, $ v) (ako ($ v-> prezime == "" ) vrati; ispiši $ v-> prezime. "
"; });

Jedna od stvari koja otkriva da koristimo generatore je skupno dohvaćanje. Odnosno, primamo podatke samo kada su nam potrebni. Sljedeći primjer će nam omogućiti da dobijemo SVE naše poruke, zahtjeve za 100. Budite oprezni, metoda zahtijeva da imate prava za poruke, Samostalne aplikacije, isto ovlaštenje i, shodno tome, prijenos pristupnog ključa.
foreach ($ vk-> zahtjev ("messages.get") -> batch (100) kao $ podaci) ($ data-> svaki (funkcija ($ i, $ m) (if (isset ($ m-> tijelo)) ) print $ m-> body. PHP_EOL;));)

Dobra metoda koji se može naći u API-ju - izvršiti... Uzima parametar koda kao argument, kod je neka vrsta pseudo JavaScripta koji nam omogućava da izvršimo naš kod na strani servera, a takođe nam omogućava da izvršimo pohranjene procedure koje možemo kreirati prilikom uređivanja naše aplikacije.

Nisam mogao zanemariti ovu stvar i implementirao je u biblioteku. Ukratko, omogućava vam da pokrenete više upita kao jedan. Pogledaj sljedeći primjer kod.

$ js1 = $ vk-> zahtjev ("messages.get", ["count" => 200, "offset" => 0 * 200]) -> toJs (); // Vraća objekat tipa VkJs $ js2 = $ vk-> request ("messages.get", ["count" => 200, "offset" => 1 * 200]) -> toJs (); $ js3 = $ vk-> zahtjev ("messages.get", ["count" => 200, "offset" => 2 * 200]) -> toJs (); $ js4 = $ vk-> zahtjev ("messages.get", ["count" => 200, "offset" => 3 * 200]) -> toJs (); $ js1 -> append ($ js2) // Dodamo js2 u js1 -> append ($ js3) -> append ($ js4) -> execute () // Želimo to učiniti (to zapravo vraća RequestTransaction) - > odgovor // Zahtjev će biti izvršen tek sada -> svaki (funkcija ($ i, $ v) // Prva anonimna funkcija je potrebna za prelazak svih elemenata niza primljenih od execute-a (niz od 4 elementa, 4 zahtjeva ) ($ v-> every ( funkcija ($ c, $ d) (// Dalje za petlju kroz svih 200 poruka u svakom nizu) if (isset ($ d-> body)) print $ d-> body; // Ispis poruka ako postoji takvo polje));) );

Kao što ste obećali, jedan od onih nesporazuma na koji biste mogli naići trenutna verzija API (5.21) Metoda

Top srodni članci