Kako postaviti pametne telefone i računala. 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: stvorite spremište i inicijalizirajte jednostavan dragulj u njemu. Novi dragulj može se stvoriti naredbom bundle gem gem_name, a spremište se može stvoriti na Githubu. Evo ga, usput: https://github.com/Fodoj/groovehq.

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

Minimalni klijent

Započet ću pisanjem male klase GrooveHQ :: Client koja će biti odgovorna za izradu API zahtjeva. 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 ovog trenutka nikada nisam koristio httparty dragulj za postavljanje zahtjeva. Moje iskustvo je ograničeno na RestClient i Faraday knjižnice. Mislim da nema velika razlika koju biblioteku koristiti, ali da bi proces bio zanimljiviji odabrat ću httparty. Štoviše, ima puno zvijezda na GitHubu :)

Zapravo, mrzim Faradaya.

Dodajem sljedeći redak u groovehq.gemspec:

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

i pokrenite instalaciju paketa. Ostaje samo spojiti httpparty iznutra. / Lib / groovehq.rb:

Izrada prvog API zahtjeva

Kako bih provjerio radi li sve kako je očekivano, dodat ću metodu perform_request koja će uzeti put 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 s parametrom upita, jer neće raditi za POST zahtjeve.

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

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

zahtijevaju "./lib/groovehq.rb" klijent = 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, dobit ćete hash nečeg poput ovoga u konzoli:

("agent" => ("e-pošta" => " [e-mail zaštićen]"," first_name "=>" Kirill "," prezime "=>" Shirinkin "," href "=> "https://api.groovehq.com/v1/agents/ [e-mail zaštićen]" , "links" => ("tickets" => ("href" => "https://api.groovehq.com/v1/tickets?assignee=fodojyko%40gmail.com" } } } }

Čini se da imamo minimalnu radnu verziju dragulja! Urezivanje s promjenama je ovdje: f7d9eef.

Metoda #perform_request stvorena je samo za otklanjanje pogrešaka, tako da ne sadrži više ispravno stvaranje link-strings.

Dodavanje strukture

Što je sljedeće?

Moj sljedeći zadatak bit će dodati što više resursa slijedeći API dokumentaciju. O problemima s 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 St. Petersburgu:

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

Analizirajmo ga u dijelovima.

https: // - pristup API-ju je moguć samo putem https, pri pokušaju primanja podataka putem http prikazuje se pogreška 400. To vam omogućuje 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. To je učinjeno tako da ako se v2 ikada pojavi, prijelaz na njega će biti neobavezan, 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 desetaka mogućih načina.

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

& sort = + starts_at - sortiranje prema 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, poveznica, poster.

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

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

Popis polja koja se mogu prikazati nalazi se u označenoj online dokumentaciji Izborno kao na snimku zaslona:

Razvrstavanje vrijednosti

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

Ime
počinje u
Grad
postotak preporuke
created_at
iskaznica

Naziv polja za sortiranje mora biti naveden u zahtjevu, na primjer:

Za sortiranje u silaznom redoslijedu morate navesti - ispred naziva polja, na primjer:
https://api.timepad.ru/v1/events?sort=-id

Prilikom sortiranja uzlaznim redoslijedom možete po želji označiti plus ispred naziva, na primjer,

Paginacija

Svi popisi u API-ju podijeljeni 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": [...])

Zbroj 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 trebate prazne vrijednosti, morate navesti parametar show_empty_fields s vrijednošću true

Pozdrav, Habr!

Svojedobno, surfajući internetom za racionalnu upotrebu API-ja Vkontakte, nisam mogao pronaći nešto razumljivo, jedine knjižnice koje sam pronašao implementirane su bez korištenja ikakvih općeprihvaćenih praksi i bez prekrasan kod... Odlučio sam ispraviti ovaj nesporazum i napisao svoju biblioteku za rad s Vkontakte API-jem.
Živahni detalji i pristupi pod habrakatom.

Dogodilo se da je Vk API prilično dobro implementiran, s izuzetkom nekih nelogičnih točaka, koje ću spomenuti kasnije. No danas ne govorimo o kvaliteti, već o konkretnoj primjeni.

Odmah je potrebno napraviti rezervaciju, osim opisa, u svoju biblioteku ću donijeti dijelove radnog koda, link na koji ću dati na kraju članka. Knjižnica radi na potonjem stabilna verzija 5.5, ako izrežete generatore iz skupnog primanja, onda bi trebao raditi na 5.4.

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

Algoritam za dobivanje u prvom slučaju svodi se na provedbu sljedećih točaka:

  • Prikazujemo poveznicu za autorizaciju korisnika koju formatiramo u skladu s dokumentacijom
  • Korisnik ga prati i prijavljuje
  • Korisnik se preusmjerava na REDIRECT_URI naše aplikacije s kodom parametra GET
  • Naša aplikacija mora poslati zahtjev API-ju koji sadrži kod kako bi dobila token za pristup korisnika
  • API odgovara ili objektom koji sadrži token za pristup ili greškom.

Primjer koda s kojim 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ša domena localhost, a trenutna datoteka test.php. Ako je sve prošlo dobro, tada ć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 izrađeni zahtjev na API URL. Zahtjev mora sadržavati naziv metode i argumente.

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

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

Kada koristimo knjižnicu, moramo stvoriti osnovni objekt, poput ovoga:
$ vk = getjump \ Vk \ Core :: getInstance () -> apiVersion ("5.5") -> setToken ($ token);

Nekoliko primjera upita pomoću biblioteke:

Točno 100 objekata koji sadrže korisničke podatke od 1 do 100 proći će kroz anonimnu funkciju u svakom. Imajte na umu da ako uklonimo poziv funkcije, neće biti postavljen zahtjev, a sve zato što će biti vraćen objekt koji ima čarobne metode __call i __get nadjačane , što nam omogućuje da uputimo zahtjev kada nam je stvarno 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 nam otkriva korištenje generatora je skupno dohvaćanje. Odnosno, podatke primamo 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, istu autorizaciju i, sukladno tome, prijenos pristupnog ključa.
foreach ($ vk-> zahtjev ("messages.get") -> batch (100) kao $ podaci) ($ podaci-> svaki (funkcija ($ i, $ m) (if (isset ($ m-> tijelo)) ) ispiši $ m-> tijelo. PHP_EOL;));)

Dobra metoda koji se može pronaći u API-ju - izvršiti... Uzima parametar koda kao argument, kod je neka vrsta pseudo JavaScripta koji nam omogućuje izvršavanje našeg koda na strani poslužitelja, a također nam omogućuje izvršavanje pohranjenih procedura koje možemo kreirati prilikom uređivanja naše aplikacije.

Nisam mogao zanemariti ovu stvar i implementirao je u knjižnicu. Ukratko, omogućuje vam pokretanje više upita kao jedan. Izgled sljedeći primjer kodirati.

$ js1 = $ vk-> zahtjev ("messages.get", ["count" => 200, "offset" => 0 * 200]) -> toJs (); // Vraća objekt 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 se izvršiti tek sada -> svaki (funkcija ($ i, $ v) // Prva anonimna funkcija potrebna je 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

Vrhunski povezani članci