API-ul VKontakte. Ce ne oferă API-ul VKontakte?

Cei care decid să dezvolte aplicații pentru VKontakte vor trebui, mai devreme sau mai târziu, să se confrunte cu un astfel de concept precum API (interfață de programare a aplicațiilor), care înseamnă literalmente interfață de programare a aplicațiilor.


Mai simplu - API acesta este un întreg complex de diverse funcții gata făcute, clase gata făcute, constante etc., care pot fi utilizate în terți. API-ul VKontakte este îmbunătățit în mod constant și astăzi este deja un set complet funcțional de suplimente care permite.

Puteți citi documentația în detaliu aici.
Ultima transformare globală a acestui mediu de dezvoltare a fost realizată în aprilie 2009. Desigur, chiar și după aceea site-ul a fost modificat constant. Să remarcăm principalele caracteristici ale API-ului VKontakte

  1. API-ul a permis aplicațiilor să acceseze prietenii, fotografiile și videoclipurile acestora. Aplicațiile pot acum creează singur albume și plasează informații în ele. Acest lucru nu s-a întâmplat înainte. Important este ca atunci cand instaleaza o astfel de aplicatie, utilizatorul decide daca ii acorda sau nu acces la datele personale.
  2. Trimiterea notificărilor de către aplicații. Da, uneori e enervant Notificare pop-upîn partea stângă jos a ecranului este implementat și folosind API-ul.
  3. Invitarea prietenilor la aplicații a devenit, de asemenea, mai ușoară datorită interfața de programare a aplicației, pe care a fost implementată această funcție de invitație în masă. Ulterior, aceste invitații au început să fie folosite pentru publicitate.
  4. Publicitatea de la VK a dispărut din paginile aplicațiilor. Acum, dezvoltatorul unui joc sau program pentru VK decide singur dacă are nevoie de publicitate pe unitatea sa flash. Dacă da, el are dreptul să-și plaseze pe al său și să primească din el 100% profit.
  5. Așa cum l-au numit dezvoltatorii VK, utilizatorii care integrau aplicații au obținut acces la economia internă a rețelei. Mai simplu spus, a devenit disponibil un API care permite utilizați VKontakte ca plăți interne.
  6. Oportunitate lansați aplicații în modul ecran complet. Creșterea dimensiunii maxime a cadrului a făcut posibilă plasarea de bannere suplimentare cu publicitate, așa că astăzi dezvoltarea de aplicații pentru VK nu este doar o plăcere, ci o activitate destul de profitabilă atunci când decideți să vă angajați în publicitate și să vindeți bannere din acesta.
  7. Aplicațiile de la terțe părți se răspândesc acum și prin fluxul de știri. Acesta este un alt pas pentru a le populariza. În plus (chiar dacă a fost cu mult timp în urmă, o pictogramă în miniatură a devenit disponibilă pentru aplicație).
  8. Ordinea de ieșire a aplicației implementat și folosind API. Astăzi, implicit, acele jocuri care sunt lansate cel mai des sunt pe primele poziții. Cele pe care nu le-ați folosit de mult timp le găsiți la sfârșitul listei.
  9. Datorită API-ului, a devenit disponibil și statistici detaliate încorporate. Astăzi puteți număra cu ușurință vizitatorii, vizualizările paginii, sexul, vârsta, locația utilizatorului aplicației. Toate informațiile sunt prezentate în cel mai vizual mod posibil, sub formă de grafice flash, care sunt construite instantaneu. Acest lucru a fost făcut în primul rând pentru publicitate (vânzarea spațiului publicitar). Primești statistici, vezi că aplicația este folosită de zeci de mii de oameni. Arătați acest lucru agentului de publicitate, care probabil va dori să plătească pentru banner într-o astfel de aplicație.
  10. Pentru cele mai populare aplicații a devenit posibil înregistrarea subdomeniilor scurte(de exemplu chat.vk.com și similare) pentru memorare ușoară și acces rapid.
  11. Ei bine, în sfârșit, oportunitatea a apărut afișarea informațiilor pe paginile personale ale utilizatorilor.

Deseori sunt intrebat cum să lucrezi cu API. Cea mai populară problemă legată de API, este - lucrează cu API-ul VKontakte. În acest articol voi arăta cum să lucrați cu API-ul VKontakteși, cel mai important, vă voi arăta asta toate API-urile funcționează după același principiu.

Aici procedură ceea ce trebuie să faci pentru a începeți să lucrați cu orice API:

  1. Găsi documentație după cum este necesar API.
  2. Uite Exemple de conexiune API. Aici pot fi diferite opțiuni. De exemplu, un serviciu va necesita o cheie secretă eliberată după înregistrare. La al doilea serviciu, toate cererile nu necesită chei secrete. Pe al treilea serviciu, există opțiuni pentru a lucra cu o cheie secretă și fără. Uneori, cheia secretă este apelată jeton.
  3. Copie cod simplu gata făcut de pe site-ul de documentare și verificați funcționarea acestuia. Dacă nu funcționează, atunci căutați singur eroarea, deoarece este puțin probabil ca serviciul să aibă una.
  4. Găsiîn documentație metodă, care vă rezolvă problema.
  5. Folosind exemple și descrierea metodei, trimiteți solicitarea corectă către API.
  6. În funcție de formatul răspunsului, analizați-l în „ componente", apoi faceți ceea ce este necesar - afișați-l utilizatorului, salvați-l într-un fișier, trimiteți-l la baza de date și altele asemenea.

Și ca exemplu de urmare a acestor instrucțiuni, ne vom uita la API-ul VKontakte. Asa de:

  1. Link către documentație.
  2. În acest caz, există metode care sunt publice și, prin urmare, nu necesită un token și există metode care necesită unul.
  3. În acest caz, nu am găsit exemple într-o anumită limbă. Poate că sunt acolo, dar în mod clar nu sunt la vedere. De obicei, la API Există exemple pentru fiecare metodă în diferite limbi.
  4. Vrem să ne retragem 5 cele mai recente postări de pe peretele unui anumit utilizator și apoi afișați-le pe site-ul dvs. Metoda de care avem nevoie.

Acum trebuie trimiteți o solicitare către API folosind descrierea metodei. Vom face asta prin PHP:

$wall = file_get_contents("https://api.vk.com/method/wall.get?v=5.3&filter=others&domain=myrusakov&count=5");
print_r($perete);
?>

In acest caz, folosesc API 5.3 (v=5,3), afișez toate intrările indiferent de autor ( filtru=altii) din pagina ta ( domeniu=myrusakov) în cantitate 5 lucruri ( număr=5). Cred că totul este foarte transparent aici.

Am primit un răspuns în format JSON, iar acum trebuie să trecem la ultimul punct - analizând răspunsul la " componente„. În continuare, vom afișa postările de pe perete într-o formă mai mult sau mai puțin lizibilă pe pagina site-ului nostru. Rezultatul rezultat Cod PHP:

$wall = file_get_contents("http://api.vk.com/method/wall.get?v=5.3&filter=others&domain=myrusakov&count=5"); // Trimite cererea
$wall = json_decode($wall); // Convertiți șirul JSON într-o matrice
$perete = $perete->răspuns->articole; // Obțineți o serie de comentarii
pentru ($i = 0; $i< count($wall); $i++) {
ecou"

".($i + 1).". „.$wall[$i]->text.”
„.date(„A-m-d H:i:s”, $wall[$i]->data).”

"; // Afișează înregistrările
}
?>

După cum puteți vedea, totul este foarte simplu. Cea mai grea parte este descompunerea acestuia în elementele sale componente. Prefer să scot rezultatul de la API prin print_r, și abia apoi scrieți procesarea acesteia. Deși puteți să vă uitați la un exemplu de răspuns în descrierea metodei și apoi să scrieți un parser.

  • Traducere
  • Tutorial

API-ul Beacon este o interfață bazată pe JavaScript pentru:

trimiterea unei cantități mici de date către server din browser, fără a aștepta un răspuns. În acest articol, vom analiza când este util API-ul Beacon, cum diferă de utilizarea XMLHTTPRequest (Ajax) în aceleași scopuri și cum să-l folosească.

De ce avem nevoie de un alt API?

API-ul Beacon este folosit pentru a trimite date mici către server fără să aștepte un răspuns. Ultima parte a declarației este cea mai interesantă. API-ul Beacon este conceput special astfel încât să puteți trimite date și să uitați de ele. Nu este nevoie să așteptați un răspuns, deoarece nu va fi unul.


Metaforă cu cărți poștale, acestea sunt cărți pe care oamenii le trimit/trimit unii altora. De regulă, au scris un mic text asupra lor („Unde ești? Și eu sunt la malul mării lol.”, „Vremea aici este grozavă, nu ca în biroul tău”), l-au aruncat prin poștă și au uitat . Nimeni nu se aștepta la un răspuns de genul „Am plecat deja pentru tine”, „Este minunat în biroul meu”.


Există multe cazuri în care o abordare „trimite și uită” ar fi potrivită.

Urmărirea statisticilor și informații analitice

Acesta este primul lucru care îmi vine în minte. Soluțiile mari precum Google Analytics pot oferi o imagine de ansamblu bună asupra elementelor de bază. Dar dacă vrem ceva mai personalizat? Trebuie să scriem un cod pentru a urmări ceea ce se întâmplă pe pagină (cum interacționează utilizatorii cu componentele, cât de departe derulează, ce pagini au fost afișate înainte de prima vânzare), apoi trimitem aceste date către server când utilizatorul părăsește pagina. Beacon este ideal pentru această sarcină, deoarece pur și simplu trimitem date și nu avem nevoie de un răspuns de la server.

Depanare și înregistrare

O altă aplicație este înregistrarea informațiilor din codul JavaScript. Imaginați-vă o situație în care aveți o aplicație mare cu UI/UX bogat. Toate testele sunt verzi, dar în producție apare periodic o eroare despre care știți, dar nu o puteți remedia din cauza lipsei de informații. În acest caz, puteți utiliza Beacon pentru diagnosticare.


De fapt, orice problemă legată de logare poate fi rezolvată folosind Beacon. Aceasta ar putea fi crearea de puncte de salvare în jocuri, colectarea de informații despre utilizarea noilor funcționalități, înregistrarea rezultatelor testelor și așa mai departe. Dacă este ceva ce se întâmplă în browser și doriți ca serverul să știe despre asta, Beacon este ceea ce aveți nevoie.

Nu am mai făcut asta înainte?

Știu la ce te gândești. Nimic din toate astea nu este nou? De peste 10 ani, comunicăm cu nordul prin XMLHTTPRequest. Recent am început să folosim API-ul Fetch, care în esență face același lucru, doar cu o nouă interfață Promise. Deci, de ce avem nevoie de un alt API Beacon?


Caracteristica cheie este că nu avem nevoie de un răspuns de la server. Browserul poate pune în coadă cererea și trimite datele fără a bloca executarea vreunui cod. Deoarece browserul este implicat în acest lucru, nu contează pentru noi dacă codul încă rulează sau nu, browserul pur și simplu își va trimite în liniște cereri în fundal.


Cu Beacon API nu este nevoie să așteptați cel mai bun moment pentru procesor sau rețea. Pur și simplu adăugarea unei cereri la coadă folosind un far nu costă aproape nimic.


Pentru a înțelege de ce este important acest lucru, priviți cum și unde este utilizată de obicei o astfel de logică. De exemplu, pentru a măsura cât timp este utilizatorul pe pagină, trebuie să trimitem o solicitare către server cât mai aproape de sfârșitul sesiunii.


Acest lucru se face de obicei la descărcare sau înainte de descărcare. Un astfel de cod poate bloca execuția și dacă există o întârziere în descărcarea unei pagini, atunci încărcarea paginii următoare este și ea întârziată. Acest lucru are ca rezultat un UX mai puțin decât stelar.


Înțelegeți cât de lente sunt solicitările HTTP? Și ultimul lucru pe care îl doriți este să înghesuiți o solicitare HTTP între tranziții.

Încercarea API-ului Beacon

Exemplul de utilizare de bază este foarte simplu:


let result = navigator.sendBeacon(url, data);

Folosind navigator.sendBeacon()

navigator.sendBeacon ia doi parametri. Prima este adresa URL la care va fi trimisă cererea, a doua este datele care trebuie trimise. Solicitarea este sub forma unui HTTP POST.


date - acest parametru poate accepta mai multe formate de date, toate cu care funcționează API-ul Fetch. Acesta ar putea fi Blob, BufferSource, FormData sau URLSearchParams etc.


Îmi place să folosesc FormData pentru date simple cheie-valoare, nu este complicat și ușor de utilizat.


// URL unde se trimit datele let url = "/api/my-endpoint"; // Creați un nou FormData let data = new FormData(); data.append("bună", "lume"); let result = navigator.sendBeacon(url, data); if (rezultat) ( console.log ("Adăugat la coadă!"); ) else ( console.log ("Eroare."); )

Suport pentru browser

Suportul pentru acest API este destul de solid. Singurul browser care nu acceptă este Internet Explorer (nu mă așteptam la asta) și Opera Mini. Dar totul funcționează în Edge. În cele mai multe cazuri, există asistență, dar este mai bine să verificați pentru orice eventualitate:


if (navigator.sendBeacon) ( // Cod Beacon ) else ( // Folosiți XHR? )

Exemplu: înregistrarea timpului petrecut pe pagină

Pentru a vedea totul în practică, să creăm un sistem simplu de numărare a timpului petrecut de un utilizator pe o pagină. Cand pagina se incarca ne uitam la ora si cand pleaca trimitem o solicitare de la ora de incepere a vizualizarii si cea curenta catre server.


Deoarece ne interesează doar timpul petrecut pe pagină și nu timpul real, putem folosi performance.now() pentru a obține marcajul temporal de bază atunci când pagina se încarcă:


let startTime = performance.now();

Să includem o mică parte de logică într-o funcție ușor de utilizat:


let logVisit = function() ( // Testează dacă avem suport dacă (!navigator.sendBeacon) returnează adevărat; // URL la care trimite datele, de exemplu, let url = "/api/log-visit"; // Date la send let data = new FormData(); data.append("start", startTime("end", performance.now()); ! navigator.sendBeacon(url, data);

Și, în sfârșit, trebuie să apelăm această funcție atunci când utilizatorul părăsește pagina. Primul meu gând a fost să folosesc descărcarea, dar Safari pe Mac pare să blocheze solicitarea din motive de securitate. Prin urmare, este mai bine să utilizați înainte de descărcare:


window.addEventListener(„înainte de descărcare”, logVisit);

Când pagina se încarcă (sau înainte), funcția noastră logVisit() va fi apelată și, dacă browserul acceptă API-ul Beacon, va trimite o solicitare către server.

Câteva puncte

Deoarece majoritatea problemelor pe care API-ul Beacon va fi folosit pentru a le rezolva gravitează în jurul urmăririi activității, va fi important să rețineți latura socială și legală a întregii bucătării.

GDPR

Doar amintiți-vă de el.

DNT: NU Urmăriți

În plus, browserele au o opțiune care permite utilizatorilor să indice că nu doresc ca activitatea lor să fie urmărită. Do Not Track trimite un antet HTTP care arată astfel:


DNT: 1

Dacă urmăriți date care pot indica un utilizator și există DNT: 1 în antetele cererii, atunci este mai bine să ascultați utilizatorul și să nu salvați nicio dată. De exemplu, folosind PHP, puteți verifica acest lucru după cum urmează:


if (!empty($_SERVER["HTTP_DNT"])) ( // nu vreau, nu am nevoie )

In cele din urma

API-ul Beacon este într-adevăr o modalitate foarte convenabilă de a trimite date către server, mai ales în contextul înregistrării. Suportul pentru browser este destul de bun și vă permite să înregistrați cu ușurință orice informație fără consecințe negative pentru performanța și capacitatea de răspuns a interfeței dvs. de utilizare. Natura neblocantă a acestor solicitări joacă un rol foarte bun în acest sens, este mult mai rapidă decât alternativele XHR și Fetch.


Etichete: Adăugați etichete

Rețelele sociale au devenit deja parte a vieții noastre de zi cu zi și au atras milioane de utilizatori. Și noi zone pentru creativitate s-au deschis pentru fratele nostru flasher. În special, aplicațiile Flash ale proiectului de rețea VKontakte, pentru care a fost creat un API special care vă permite să integrați cu ușurință aplicația în sistemul VKontakte.

Deci, ce ne oferă API-ul VKontakte - să ne dăm seama.

Revizuire

Ca de obicei, în primul rând, să citim ce scriu colegii noștri despre asta.

Cu toate acestea, nu am putut găsi niciun articol inteligibil, cu excepția materialelor din cadrul VKontakte în sine. Dacă cineva a văzut oricare dintre acestea, vă rugăm să postați un link în comentarii. Asa de:

Capacitățile API VKontakte

Să încercăm să identificăm capacitățile aplicațiilor VKontakte analizând funcțiile API.

Lucrul cu datele utilizatorului

Aplicația are acces la următoarele date:

  • Utilizatorul care vizualizează aplicația a instalat această aplicație pe pagina sa?
  • Date pentru orice utilizator, pe baza ID-ului acestuia:
    - Nume,
    - nume de familie,
    - pseudonim,
    - podea,
    - Data nașterii,
    - oraș,
    - o tara,
    - Fus orar,
    - URL-uri pentru fotografii de dimensiuni mici, medii și mari,
    - Este cunoscut numărul lui de telefon mobil?
    - rating
  • Echilibru utilizator pe contul de aplicație
  • Accesul la datele utilizatorului care vizualizează aplicația:
    - permiteți-i să îi fie trimise notificări,
    - acces la prieteni,
    - acces la fotografii,
    - acces la înregistrări audio,
    - acces la oferte,
    - acces la întrebări,
    - acces la paginile wiki,
    - acces la meniul din stânga,
    - publicare pe pereții utilizatorilor.
  • O listă a grupurilor din care este membru utilizatorul, cu informații generale despre fiecare grup.

Fiecare utilizator VKontakte are prieteni - alți utilizatori VKontakte. Date disponibile ale prietenilor utilizatorului:

  • Lista prietenilor utilizatorului actual.
  • Lista prietenilor utilizatorului actual care au instalat deja această aplicație.

Aplicația poate efectua și următoarele acțiuni:

  • Creșteți ratingul utilizatorilor în numele aplicației
  • Dacă utilizatorul a instalat o aplicație în meniul din stânga, aplicația poate seta un nume scurt pentru aplicație, precum și afișa un contor lângă numele aplicației - de exemplu, un contor de notificări.
  • Setați și citiți bara de stare a aplicației.

Lucrul cu fotografiile utilizatorului

Un utilizator VKontakte poate crea multe albume cu fotografii în secțiunea „Fotografiile mele”. API-ul oferă o gamă largă de opțiuni pentru lucrul cu albume și fotografii.

Fotografiile trebuie să fie în format JPG, PNG sau GIF.

Aplicația poate primi:

  • Lista de albume foto cu informații generale despre fiecare album.
  • O listă de fotografii dintr-un album (sau direct prin act de identitate cu fotografie) cu un set de link-uri către imagini de diferite dimensiuni și calități.

Aplicația poate efectua următoarele acțiuni cu albume și fotografii:

  • Creați un album (cu o descriere și controlul accesului la acesta).
  • Editați datele unui album existent.
  • Schimbați ordinea listei de albume.
  • Schimbați ordinea fotografiilor din album.
  • Transferați fotografii din album în album.
  • Faceți o fotografie pe coperta unui album.
  • Încărcați fotografii pe serverul VKontakte, pe peretele utilizatorului, pe pagina utilizatorului.

Lucrul cu înregistrările audio ale utilizatorilor

Utilizatorul poate descărca înregistrări audio și le poate asculta în secțiunea „Înregistrările mele audio”.

Înregistrarea audio trebuie să fie în format MP3, să nu depășească 10 MB și să nu încalce drepturile de autor.

API-ul oferă o gamă largă de opțiuni pentru lucrul cu înregistrări audio:

  • Primiți o listă de înregistrări audio ale unui utilizator sau grup cu informații generale și detaliate despre fiecare înregistrare.
  • Primiți versurile cântecelor din înregistrări audio.
  • Căutați înregistrări audio.
  • Descărcați, ștergeți, restaurați înregistrările audio șterse.
  • Editați datele de înregistrare audio.
  • Adăugați o înregistrare audio la o pagină de utilizator sau de grup.
  • Schimbați ordinea înregistrărilor audio.

Lucrul cu videoclipuri ale utilizatorilor

API-ul vă permite să obțineți o listă de înregistrări video ale utilizatorilor și grupurilor cu informații generale despre fiecare înregistrare video.

Peretele utilizatorului

Aplicația poate afișa pe peretele utilizatorului o postare care conține text, precum și o imagine din albumul utilizatorului sau o imagine tocmai încărcată pe serverul VKontakte.

API-ul oferă aplicației acces la următoarele funcții:

  • Obțineți soldul de plată (numărul de voturi) al aplicației.
  • Obțineți soldul de plată (numărul de voturi) al utilizatorului.
  • Transferați voturile din contul aplicației în contul de utilizator.
  • Transferați voturile din contul utilizatorului în contul aplicației.
  • Transferați voturi din contul unui utilizator în contul altui utilizator în cadrul aplicației.
  • Vizualizarea istoricului tranzacțiilor pentru transferul voturilor între utilizatori și aplicație

Lucrul cu SMS

Aplicația VKontakte poate folosi servicii atât de puternice precum trimiterea și primirea de SMS-uri:

  • Se trimite notificare prin SMS. În acest caz, din contul aplicației se scad 0,1 voturi.
  • Vizualizați o listă de mesaje SMS primite de la utilizatori de către aplicație.
  • Vizualizați istoricul notificărilor prin SMS trimise de aplicație.
Trimiterea unui mesaj SMS este gratuită (costul unui mesaj SMS obișnuit). Trimiterea se efectuează către telefonul +7 921 000 00 07, iar pentru ca aplicația să-și primească mesajul, API-ul oferă posibilitatea de a seta aplicației un prefix, pe care utilizatorul trebuie să-l specifice la începutul mesajului său SMS.

Lucrul cu serviciul „Oferte”.

Folosind serviciul „Oferte”, utilizatorul are posibilitatea de a-și crea propria ofertă unică. Această ofertă va putea fi văzută de toți utilizatorii VKontakte - acest serviciu este independent de pagina personală. Orice propoziție începe cu cuvintele „Ați dori”, urmate de textul în sine, iar la sfârșit există un semn de întrebare. Utilizatorii pot vedea oferte de la alți utilizatori, pot accepta oferta altcuiva făcând clic pe opțiunea „Da, desigur” sau refuză făcând clic pe opțiunea „Nu”.

Deci, funcții pentru lucrul cu oferte:

  • Editați, partajați și închideți o sugestie a utilizatorului care vizualizează aplicația.
  • Răsfoiți și căutați sugestii de utilizatori.
  • Acceptați și respingeți sugestiile utilizatorilor.
  • Vizualizați răspunsurile la sugestia unui utilizator.
  • Primiți o listă de răspunsuri la propunerile acceptate de utilizator.
  • Ștergerea și marcarea răspunsurilor utilizatorilor ca citite.

Lucrul cu serviciul Întrebări

Un serviciu similar celui precedent, care vă permite să puneți întrebări și să primiți răspunsuri de la alți utilizatori. De asemenea, API-ul are tot ce aveți nevoie pentru a gestiona acest serviciu din aplicații.

Lucrul cu paginile Wiki

Utilizatorii au la dispoziție un sistem de editare a paginilor care permite membrilor grupului să colaboreze la crearea unui număr infinit de pagini cu referințe încrucișate. Astfel, utilizatorii pot crea biblioteci sau mini-enciclopedii în grupuri. În plus, utilizatorii pot utiliza markup wiki special pentru a proiecta pagini.

Aplicațiile au capacitatea de a lucra cu pagini Wiki:

  • Primiți text și informații complete despre pagina wiki.
  • Editați și salvați textul și setările unei pagini wiki.
  • Obțineți o listă de pagini wiki dintr-un grup.
  • Traduceți marcajul wiki în marcajul html.

Organizare chat

API-ul vă permite să creați un chat în aplicație folosind o coadă de mesaje - 127 de mesaje. În acest scop, sunt furnizate funcții pentru adăugarea unui mesaj la o coadă și vizualizarea întregii cozi de mesaje.

Salvarea înregistrărilor jocului

API-ul oferă funcții speciale pentru salvarea rezultatelor jocului utilizatorului și obținerea unei liste de rezultate.

Lucrul cu variabile

Pentru a stoca date, API-ul oferă fiecărei aplicații 4096 de variabile unice de 255 de octeți.

În plus, variabilele sunt distribuite în următoarele intervale:

  • Variabile globale: pot fi utilizate pentru date care sunt comune tuturor instanțelor unei aplicații date, de exemplu tabelul cu scoruri mari ale unei aplicații de jocuri.
  • Variabile utilizator: Aceste variabile sunt unice pentru fiecare utilizator al unei aplicații date și pot servi, de exemplu, pentru a salva jocul utilizatorului.
    Aproximativ jumătate din variabile sunt partajate cu alți utilizatori. Unele variabile sunt rezervate pentru nevoi diferite.
  • Variabile de sesiune: atunci când lucrați cu variabile, puteți specifica un identificator de sesiune (sesiune sau cameră) în cerere. În acest fel, variabilele din acest interval vor fi comune tuturor utilizatorilor care vizualizează în prezent aplicația. În consecință, aplicațiile pot efectua comunicații multi-utilizator în timp real - chat-uri, jocuri multiplayer etc.
  • Variabilele care conțin date temporare care sunt unice pentru aplicația vizualizată curent vor dispărea când aplicația este închisă.

Cu toate acestea, numărul de variabile nu este mare - doar 1024 de variabile pe interval, iar aceasta nu include variabilele rezervate.


Lucrul cu un server de dezvoltator la distanță

Aplicația VKontakte este o aplicație Flash obișnuită și are un mare dezavantaj. Nu poate fi considerat rezistent la hack. Mai exact, costurile de hacking a unei aplicații Flash nu sunt la fel de mari ca, de exemplu, hacking-ul unui server. Există un număr suficient de programe de decompilare SWF cu ajutorul cărora puteți obține cu ușurință codul sursă, puteți afla logica aplicației și puteți falsifica solicitările API.

Prin urmare, unele funcții care au fost enumerate mai sus funcționează numai de pe serverul de la distanță al dezvoltatorului, ocolind aplicația flash, și anume:

  • Lucrul cu evaluările utilizatorilor
  • Afișarea unei stări scurte a utilizatorului în aplicație pe pagina sa principală
  • Trimiterea notificărilor utilizatorilor (numai utilizatorilor care au instalat această aplicație)
  • Lucrul cu voturi (tranzacții de plată)
  • Instalarea unui contor pe o aplicație și lucrul cu bara de stare a aplicației
  • Trimiterea și vizualizarea notificărilor prin SMS

Astfel, pentru a putea efectua aceste operațiuni, aplicația nu trebuie să acceseze direct API-ul, ci să solicite serverul său de strat special conceput, care la rândul său va comunica cu API-ul VKontakte și va furniza aplicației datele primite.

În general, desigur, pentru proiectele mari care lucrează în formatul de aplicație VKontakte, desigur, acest server special ar trebui să fie „creierul” care procesează toată logica aplicației. Aplicația Flash în acest caz este doar un „client subțire” care afișează doar frumos rezultatul muncii serverului.

Localizarea aplicației

Dezvoltatorii de aplicații au posibilitatea de a-și traduce aplicațiile în peste 50 de limbi folosind platforma de traducere VKontakte. În acest moment, platforma se află în stadiul de testare și este aplicabilă doar pentru aplicațiile cu un număr mare de utilizatori.

Utilizarea Containerului de aplicație Flash

O modalitate alternativă de a încorpora o aplicație Flash într-o pagină VKontakte este printr-un container Flash.

Containerul Flash oferă următoarele capabilități pentru aplicație:

Caracteristicile API-ului VKontakte

Deci, ne-am familiarizat cu toate posibilitățile pe care le oferă API-ul VKontakte. Aș dori să subliniez caracteristicile (sau mai degrabă dezavantajele) API-ului pe care le-am întâlnit:

Concluzie

Aplicațiile VKontakte Flash au un API destul de puternic care rezolvă problemele de bază și poate sprijini pe deplin proiecte de complexitate medie. Toate celelalte nevoi pot fi rezolvate de către dezvoltator folosind serverul său web.

O zi buna, prieteni!

De foarte multe ori văd că mulți comercianți de cereale începători privesc în altă parte API și POST/GETși o fac corect. La urma urmei, nu este nimic mai bun POST/OBȚINE pentru a reduce risipa de resurse cu șabloane, ei bine API De aceea s-a făcut pentru a obține rapid rezultate concrete.

Am ales ca exemplu VK.COM pentru că îmi este mai familiar și de înțeles.

Pentru a funcționa, avem nevoie de un editor de text și un sniffer.

Editorul de text pe care îl folosesc Notepad++, iar adulmecul - Analizor HTTP. Toate acestea sunt ușor de Google, dar dacă aveți probleme cu căutarea, nu ezitați să scrieți într-un mesaj personal, vă voi ajuta.

Nu vom lua în considerare editorul de text, dar ne vom opri mai detaliat asupra sniffer-ului.

Vedere generală a ferestrei de lucru a snifferului Analizor HTTP: ​


Nu mă voi opri asupra faptului că ați activat deja acest program într-un mod convenabil pentru dvs. sau că utilizați versiunea de încercare. O am deja activată și de aceea fereastra arată așa.

Inițial, programul rulează întotdeauna la oprire. Trebuie să-l lansăm făcând clic pe start :

În continuare, programul va începe să intercepteze traficul și să-l grupeze după aplicație. De aceea o folosesc. Pentru că este mai convenabil decât același fiedler și nu trebuie să dansezi cu tamburine ca cu un Virshark.

Există un hack de viață - după prima lansare, accesați Vizualizare și selectați Ora locala:

Acum fiecare cerere va fi afișată la timp, ceea ce este foarte convenabil.

Acum să aruncăm o privire mai atentă asupra spațiului de lucru al programului:

Vom lucra în principal cu două zone, care în imaginea de mai sus sunt desemnate 1 și, respectiv, 2. Acolo unde se arată ora solicitării făcute, în imagine este indicată și modalitatea de solicitare.

În zona 1 avem ora de solicitare, metoda de solicitare și cererea în sine, de unde o putem copia, dar mai multe despre asta mai târziu.
In zona 2 vom avea in stanga ce trimitem catre server, iar in dreapta ce primim ca raspuns de la server.

Folosim acest program pentru a lucra cu POST/OBȚINE cereri. Algoritmul de aici este simplu - faceți acțiunea dorită în browser și uitați-vă la ce a interceptat programul.
Am repetat același lucru în șablon. Toate. Nimic complicat.
Ei bine, atunci trebuie să vă umpleți mâna și ochiul.

Acum să ne dăm seama cum să lucrăm cu API Vk.

O descriere clară și completă a lucrului cu API poate fi găsit pe site - https://vk.com/dev/main

A lucra cu metode API trebuie să ne autentificăm. Conectându-ne o dată, primim un token, pe care apoi îl putem folosi constant pentru un cont selectat separat (până când noi înșine schimbăm tokenul sau interzicem contul).

Personal, recomand să faci mereu Autorizarea clientului Pentru De sine stătătoare -aplicații și clienții mobili, deoarece majoritatea metodelor necesită acest lucru. Cele mai simple metode, cum ar fi analizarea a ceva simplu și în domeniul public, nu necesită o autorizare atât de complexă. Da, și este mult mai ușor de făcut.

Cu aceasta cerere:

    https://oauth.vk.com:443/token?grant_type=password&client_id=2274003&client_secret=hHbZxrka2uZ6jB1inYsH&username=(-Variable.username-)&password=(-Variable.password-)=captch-keya_key-)=captch-keya_key_)&captch-Vkatch_key -Variable.captcha_sid-)

client_idȘi client_secret poate fi din aplicația dvs.
Puteți folosi datele mele, dar înțelegeți că probabilitatea ca ceva să meargă prost este mare. Cine știe ce scopuri vor fi folosirea acestei aplicații?
Odată ce o faci, atunci nu-ți face griji. Convenabil!

Să revenim la subiectul conversației.
Vom lua în considerare versiunea client, deoarece necesită confirmarea drepturilor de la un cont autorizat.
Folosind exemplul de autorizare în vk.com Îți voi arăta cum să lucrezi cu Analizor HTTP, procesarea cererilor și cookie-urilor.

Personal, pentru a lucra cu VK, separ UserAgents într-un fișier separat și, de asemenea, lucrez printr-un proxy. De aceea, toate șabloanele mele sunt adaptate lor. Folosesc un proxy cu legare IP.

Pentru a începe să lucrați cu orice, mai întâi trebuie să înțelegeți procedura exactă.
Pentru autorizarea în VK va fi așa:
1. Deschideți vk.com
2. Introduceți numele și parola.
3. Introduceți captcha în timpul autorizării, dacă este necesar.
4. Trimiteți informațiile dvs. de conectare și parolă către serverul VK.
5. Verificăm dacă autorizarea pe server a trecut.

Nu pare complicat. Să începem să ne dăm seama!

În primul rând, trebuie să adăugăm șablonului nostru Sistem.Web. Acest lucru se face astfel:
1. Accesați editorul avansat.
2. Căutați „ Link-uri de la GAC"
3. Adăugați (trageți) în panoul de mai jos (vezi captura de ecran)
4. Faceți dublu clic pe scurtătura cu „cărți” care apare
5. În fereastra pop-up, faceți clic pe „Adăugați...” și în fereastra următoare intrați Sistem.Web.
6. Alegeți pentru sistemul dvs. - 64 sau 32 de biți. Faceți clic pentru a selecta.
Toate.

Acest lucru se face astfel încât literele chirilice să poată fi traduse în date care pot fi citite de serverul VK.

Facem pregatiri:
Aici luăm proxy-ul și îl punem într-o variabilă (- Variable .proxy -)

Aici luăm UserAgent și îl plasăm într-o variabilă (- Variable .useragents -)

Apoi trebuie să luăm linia cu datele contului și să o împărțim în login și parolă.

Lucrez în principal cu date text, nu cu date tabulare, deoarece le vând în această formă.
Apoi, există o verificare pentru separator, deoarece diferiți vânzători au lucruri diferite. Cineva are un separator" : ", iar pentru cineva -" ; "

Următorul pas este să instalați un proxy și să vedeți dacă există litere rusești în parolă:

Fac acest lucru prin procesarea textului folosind expresia regulată și verificați dacă variabila este goală sau nu.
Dacă nu este gol, atunci există un alfabet chirilic și trebuie procesat.
Pentru asta folosesc fragmentul C#:

    return System.Web.HttpUtility.UrlEncode(proiect.Variables[„parolă”].Valoare, Encoding.GetEncoding(„windows-1251”));

Exact în codificarea Windows-1251!

Gata, în acest moment etapa de pregătire este finalizată și începem să facem autorizația în sine POST/OBȚINE.

Eu fac asta:
1. Lansez Analizor HTTP
2. Îi verific funcționalitatea reîmprospătând pagina în browser.
3. Ștergeți cookie-urile și memoria cache din browser
4. Efectuez acțiunile de care am nevoie (în cazul nostru, trec la https://vk.comși completați autorizația)

Acesta este ceea ce produce Analizorul:

O mulțime de informații diferite. Nu avem nevoie de partea leului.
Aici avem nevoie de abilitatea de a selecta ceea ce avem nevoie și de a șterge ceea ce nu avem nevoie.
Nu recomand ștergerea în primele etape, deoarece puteți șterge accidental ceea ce aveți nevoie și uneori apar unele variabile și cookie-uri la încărcarea imaginilor. Nu vorbesc despre VK acum, ci despre site-uri web în general.

Acesta este ceea ce rămâne după ștergerea liniilor inutile (eliminând tot felul de imagini și alte scripturi Java inutile):

Drept urmare, am ajuns cu 6 acțiuni. Nu a existat captcha și nu am rezolvat-o.
Din pacate din conturile pe care le am acum nu s-a putut prinde captcha pentru autorizare. Da, chiar nu am încercat. Am acest punct în șablon și cei care sunt interesați de modul în care se rezolvă captcha-ul îl pot privi cu ușurință acolo.

Acum vă voi arăta de unde vine totul, de unde vine și unde este plasat:

Selectați prima linie făcând simplu clic pe butonul stâng al mouse-ului.
Determinăm ce metodă este aceasta (ne uităm la ce intrare este în această linie în coloana " Metodă„). În acest caz este OBȚINE. Apoi mergem la fila RawStream, de unde obțin de obicei toate datele necesare.
Apoi luăm și copiem cererea în sine și procedăm astfel:

Faceți clic dreapta pe linia care ne interesează și selectați „ CopyCell».
Se pare că copiem textul - https://vk.com/
Este foarte confortabil.

Acum să aruncăm o privire mai atentă la cum și ce adăugăm la acțiunea noastră.

În imaginea de mai jos, în partea stângă există o parte din Analizor HTTP„a – Semn de carte” RawStream„, iar în dreapta este un film de acțiune OBȚINE cerere de la ProjectMaker:

Aici completăm această acțiune după cum urmează:
URL– introducem unde vrem să mergem (în cazul nostru este https://vk.com)
Referitor- luăm de la RawStream(acest moment este evidentiat in poza)
Codificare Windows-1251 (din moment ce lucrăm cu partea rusofonă a VK)
Recomand să setați timeout-ul la mai mult de 300 pentru proxy. Pe cele bune sau pe IP-ul tău, poți lăsa 30.
În continuare, selectăm întotdeauna în „ Sarcină » - Anteturi și conținut, deoarece folosesc adesea verificarea pentru a vedea ce răspuns a venit de la server.
Și declarăm variabila. Pentru OBȚINE interogări Întotdeauna folosesc o variabilă (- Variable .get_info -) . Asta îmi face mai clar. Poți să o suni și să o suni cum vrei.

Următoarea imagine va fi de la marcajul " În plus „din aceeași acțiune:

Bifăm caseta Redirecționare, ceea ce înseamnă că, dacă există o tranziție la următoarea/alta pagină, va executa automat cererea corespunzătoare (cel puțin așa înțeleg eu). Uneori trebuie să deconectați! Dar, în general, este un lucru util - reduce numărul de solicitări.

În câmp Agent utilizator Am plasat variabila noastră (- Variable .useragents -) în prima linie, deoarece anterior am plasat datele UserAgent-ului nostru în această variabilă.
Apoi, introduceți textul evidențiat în albastru. De fapt, facem întotdeauna acest lucru atunci când compilăm OBȚINEȘi POST cereri.
Apoi o linie cu cookie-uri va apărea acolo, dar o vom plasa în fereastră Cockie, care este mai jos.
În general, fac întotdeauna așa:
1. Selectez totul (în program Analizor HTTPîn marcaj Flux brut), care este în stânga la prima linie și copiați în ProjectMaker in actiune ( POST sau OBȚINE) pentru a marca " În plus ".
2. Lipesc totul pe teren Agent utilizator in "fila" În plus "Acțiune.
3. În textul inserat găsesc o linie care începe cu Cookieși l-am tăiat în câmpul de mai jos, care se numește " Cookie: ".
4. Scot de acolo " Cookie: " din text și lăsați datele cookie deocamdată și reveniți la UserAgent.
5. Şterg linia cu UserAgent acolo, deoarece avem o variabilă acolo.
6. Ștergem și linia Conținut-Lungime
7. Linia cu Referer mutați-l în prima parte a acțiunii - " De bază " și inserați-l în câmpul corespunzător.
8. Ștergeți începutul - " Referent: ".
Dacă referrerul folosește orice parametri, atunci vom folosi variabilele noastre corespunzătoare acestor parametri. Dacă există. Dacă nu, atunci trebuie să găsiți în avans, să luați și să declarați astfel de variabile.
Facem la fel cu Cookie. Totul ar trebui să fie prin variabile.

Acum trebuie să vedem ce a venit ca răspuns.
Vezi răspunsul în partea dreaptă RawStream:

După cum puteți vedea, aici am primit deja primele noastre cookie-uri.

Aici este util un editor de text. Iau tot ce este în răspunsul la cererea noastră și îl copiez într-un editor de text și mă uit acolo.

În general, ne interesează cookie-uri și încă două variabile:

În total, căutăm următorii parametri: " ip_h", "remixlang", "lg_h" Și " remixlhk„. Pentru comoditate, le numesc la fel - (- Variabil .ip_h -), (- Variabil .remixlang -), (- Variabil .lg_h -), (- Variabil .remixlhk -)

Iată cum va arăta în șablon:

De asemenea, fac o verificare simplă pentru a vedea dacă a fost găsit în răspunsul la OBȚINE cerere ip_h.
Dacă nu, înseamnă că ceva este în neregulă cu proxy-ul sau pur și simplu este blocat. Dacă este găsit, totul este în regulă.

În general, de regulă, totul este în regulă acolo și se găsesc datele pe care le căutăm.

Apropo, disponibilitate remixlhkîn date, la un moment dat, acesta a fost motivul pentru care majoritatea software-ului care funcționează cu VK a încetat să funcționeze. De aceea este mai bine să aveți un șablon deschis pentru ZennoPoster, unde astfel de incidente pot fi corectate rapid.

Acum trebuie să trimitem date de autorizare către server - login și parolă.
Lucrăm cu următoarea linie:

După cum vedem, asta este deja POST cerere și apoi vom folosi o altă acțiune.

Ca și în exemplul anterior, copiați celula și aceasta va fi URL viitorul nostru POST cerere:

Tot la fel. De asemenea, ne asigurăm că punem jos referrerul!

Preluăm și date de la RawStream:

Tipul de conținut: application/x-www-form-urlencoded definește tipul de date.
Acesta este motivul pentru care urlencoded!

Datele arată așa (în imaginea de mai sus într-un dreptunghi roșu și cu indicația textului " DATE"):

    act=login&role=al_frame&expire=&captcha_sid=&captcha_key=&_origin=http%3A%2F%2Fvk.com&ip_h=4be754765f3544efab&lg_h=526aa8a2bec4cc5c0a&email=154765f3544efab&lg_h=526aa8a2bec4cc5c0a&email=154765f3544efab

Nu cred că merită să aprofundăm cum îl înlocuim cu toții? Cu variabilele noastre va deveni astfel:

    act=login&role=al_frame&expire=&captcha_sid=(-Variable.captcha_sid-)&captcha_key=(-Variable.captcha_key-)&_origin=http%3A%2F%2Fvk.com&ip_h=(-Variable.ip_h-)&lg_Variable. -)&email=(-Variable.login-)&pass=(-Variable.parolă-)

De regulă, încerc să numesc variabilele la fel ca și parametrii din interogări - este mai ușor de inserat mai târziu.
Variabile care încep cu captcha– asta este ceea ce luăm dacă există un captcha.

În setările suplimentare ale acțiunii vom avea următoarele:

Nu am bifat caseta de redirecționare pentru că încă nu mi-am dat seama de ce uneori redirecționarea corectă nu apare în POST cerere în timpul autorizării.

Apoi verific dacă există cookie-uri remixq_
Aceste cookie-uri apar atunci când vă conectați la contul dvs. Dacă nu apar, înseamnă că ceva a mers prost. Apoi verificăm pentru captcha. Dacă captcha nu apare, atunci există deja probleme cu contul în sine.

Primirea AccessTokenVK.COM nelimitat


Acest tip de jeton (dacă îl primiți pentru corect aplicații de sine stătătoare ) oferă acces la absolut toate funcțiile pe care le are un cont VK. Vă recomand să primiți întotdeauna acest tip de token, pentru a nu întâmpina o problemă mai târziu când un token simplificat nu are suficiente drepturi pentru acțiunile pe care le-ați planificat.

Pentru a obține un token, trebuie să obținem cookie-uri, ceea ce trebuie să facem deja din prima parte și doar două OBȚINE-cerere! Deși, simplificat - doar un joc de acțiune. =)

Să ne uităm la prima cerere.
Facem cererea fără redirecționare!
ÎN URL introduceți linia:
(-Variable .client_id-) - Aceasta este ID aplicații pe care trebuie să le găsiți sau să le creați singur aici:
https://vk.com/apps?act=manage
Ei bine, sau folosește-l pe al meu, pe care nu îl recomand.

Puteți vedea setările aplicației în această captură de ecran:

Și drepturile de acces sunt descrise aici - https://vk.com/dev/permissions

Dacă nu am ratat nimic, atunci ca răspuns la OBȚINE-o solicitare va primi un link pentru a primi un token.

Inițial, verific întotdeauna să văd dacă a sosit răspunsul corect. În acest caz, verific dacă răspunsul primit conține „ grant_access_title».

Acesta este răspunsul corect și iată datele de care avem nevoie.
Apoi, analizăm linkul pentru a confirma cererea, pe care o plasăm într-o variabilă (- Variable .Location -)

Și facem ultima cerere, tot fără redirecționare!

Captura de ecran arată cererea și filele.
Vă rugăm să rețineți că VK are o practică în care anumite module cookie sunt utilizate pentru anumite acțiuni și că nu ar trebui să introduceți toate modulele cookie în cerere.
Pentru unele solicitări acest moment este cu adevărat critic!

Dacă de data aceasta nu am omis nimic sau nu am făcut o greșeală, atunci răspunsul va conține simbolul de care avem nevoie:

De aici îl analizăm.

ECRANUL Afișează UN EXEMPLU CU DREPTURI PENTRU „postare fără HTTPS”!
Diferă prin faptul că un parametru este adăugat la sfârșit - secret.
Puteți citi mai multe detalii aici - https://vk.com/dev/api_nohttps
Nu iau astfel de jetoane, pentru că până acum nu a fost nevoie să primesc un astfel de jetoane și apoi să nu generez o variabilă sig.

În esență, orice acțiune cu descărcări arată exact așa - în trei etape. Principiul este același peste tot. Dacă vă dați seama de unul dintre cele mai dificile aspecte - încărcarea fotografiilor, atunci puteți face totul!

Și deci să revenim la încărcare

Ne vom uita la exemplul de încărcare a unei fotografii într-un album foto al unui grup. Pentru a face acest lucru, pe lângă simbol, mai avem nevoie de (- Variable .group_id -) și (- Variable .album_id -)

(- Variabila .group_id -) – ID grupuri

(- Variabila .album_id -) - IDalbum foto din acest grup.

Unde și cum le vei lua, nu voi lua în considerare. În exemplul meu, introdu aceste variabile în șablon prin InputSettings:

Plus lucrul cu API Ideea este că nu avem nevoie de cookie-uri sau agenți de utilizator pentru a funcționa.

Prima cerere va fi POST si arata cam asa:

În câmp URL pune codul:

    https://api.vk.com:443/method/photos.getUploadServer

Deoarece încărcăm o fotografie, folosim metoda Fotografiei.
În special - https://vk.com/dev/photos.getUploadServer
Toate metodele posibile pot fi găsite aici - https://vk.com/dev/methods

Solicitarea este aproape întotdeauna formată astfel - https://api.vk.com:443/method/ + metoda aleasă .

Luăm metoda (ce text să atașăm la cerere) de aici:

Datele vor fi astfel:

    group_id=(-Variable.group_id-)&album_id=(-Variable.album_id-)&access_token=(-Variable.access_token-)

De unde am luat toate astea? E simplu! Să ne uităm cu atenție la descrierea metodei și să vedem această parte - Parametri:

În acest caz, există parametri precum album_idȘi group_id. Sunt obligatorii si necesare pentru formarea corecta a cererii.

Șirul de interogare este format ca – parametrii necesari conectați prin „ & " Și jeton de acces la sfârșitul. Posibil o versiune API a pune.

În cazul meu, album_idȘi group_id au fost deja setate și jeton de acces primit.
De unde și cum îl vei obține? album_idȘi group_id Depinde de tine să decizi.

Tipul de date este urlencode. Acest tip este întotdeauna folosit, cu excepția cazului în care ceva Se încarcă!
Permiteți-mi să vă reamintesc, de asemenea, că, dacă aveți îndoieli cu privire la tipul de date, atunci uitați-vă la ce tip de conținut este utilizat.

În acest caz, din anumite motive, merită să încărcați captura de ecran - doar conținutul.

Se pare că este o eroare, deoarece folosesc întotdeauna titluri și conținut, este mai convenabil - puteți verifica oricând dacă răspunsul a fost primit sau dacă a fost gol.

În general, cu datele corecte și simbolul de lucru, vom primi următorul răspuns:

  1. Tip de conținut: aplicație/json; set de caractere=utf-8

    Lungimea conținutului: 202

    Conexiune: păstrați-vă în viață

    X-Powered-By: PHP/3.19487

    Pragma: fără cache

    Cache-control: fără magazin

    Codificarea conținutului: gzip

    ("răspuns":("upload_url":"http:\/\/cs631229.vk.com\/upload.php?act=do_add&mid=187638093&aid=221646126&gid=103611875&hash=9a8bcea2719a8b27a278b27b27b2b27b2b27b9b2b27b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b)&swfupload=1&api=1","aid " :221646126,"mid":187638093))

Să luăm în considerare acest răspuns.
Există un indiciu - raspuns si nu este gol.
"ajutor" Și " mijlocul„Nu ne interesează asta id album foto de grup și id chestionar pentru încărcarea unei fotografii. Da Da. Totul arde peste tot.

Ceea ce ne interesează aici este " upload_url", îl analizăm, procesăm textul în același mod - îl înlocuim" \/ " pe " / " totul și puneți-l într-o variabilă (- Variable. upload_url -)