postigao sam osnovnu funkcionalnost koju nudi OAuth protokol
rješenje je došlo u paketu s alatom koji sam naveo ranije - qt projekt s GitHub. još uvijek nisam shvatio kako trajno pohranim autorizacijski token i za sada moram svaki put proći cijeli ovaj ciklus
- LINK naredba u mojoj aplikaciji otvori internet preglednik s Flickr stranicom
- u pregledniku se prijavim kao redovni korisnik
- potvrdim da mi je aplikacija poznata i odobravam pristup mojim podacima
- preglednik me automatski prebaci na localhost s tokenom i secret kodom za autorizaciju
- moja aplikacija pokupi te podatke za autorizaciju iz preglednika i sesija može započeti
- sada mogu slati autorizirane upite prema flickr servisu
zar to mora tako ??? kad pokušam snimiti 'token i secret' on mi ne vrijedi za slijedeću sesiju
no dobro , ovo ću još provjeriti ... evo nekoliko uputa za korištenje
++ flickr koristi OAuth ver 1.0 stoga je od cijelog projekta kojeg sam skinuo s GitHub najkorisnija klasa O1. za iniciranje autorizacije ( kako je gore opisano ) dovoljno je ovo
Kod: Označi sve
o1 = new O1(this);
o1->setClientId(O1_KEY);
o1->setClientSecret(O1_SECRET);
Kod: Označi sve
o1->setRequestTokenUrl(QUrl("https://www.flickr.com/services/oauth/request_token"));
o1->setAuthorizeUrl(QUrl("https://www.flickr.com/services/oauth/authorize?perms=write"));
o1->setAccessTokenUrl(QUrl("https://www.flickr.com/services/oauth/access_token"));
Kod: Označi sve
connect(o1, SIGNAL(openBrowser(QUrl)), this, SLOT(onOpenBrowser(QUrl)));
o1->link();
sve drugo se nalazi u paketu s GitHub projekta ! ovaj slot onOpenBrowser naprosto okida ovu naredbu
i to je to, aplikacija sada ima spremljen 'token i secret' za ovu sesiju. ako želite provjeriti da li je sve ispravno, jednostavno pozovemo flickr.test.login ili bilo koji drugi API poziv prema Flickr servisu. evo kako izgleda poziv API metode
Kod: Označi sve
QUrl url = QUrl("https://www.flickr.com/services/rest/");
QList<O0RequestParameter> reqParams = QList<O0RequestParameter>();
ovaj URL upučuje na metodu upita REST ( običan http GET ili POST ), osim toga postoji opcija XMLRPC , također SOAP
metoda upita REST je jedina podržana u projektu koji sam skinuo s GitHub - autor AKOS POLSTER - držimo se jednostavnih metoda !
Kod: Označi sve
QByteArray paramName1("method");
QString mes1 = QString("flickr.test.login");
reqParams << O0RequestParameter(paramName1, mes1.toLatin1());
ovdje vidimo kako se slažu parametri za običan http, jasno je da ovdje zapravo pišemo
&method=flickr.test.login
Kod: Označi sve
QByteArray paramName2("api-key");
QString mes2 = QString(O1_KEY);
reqParams << O0RequestParameter(paramName2, mes2.toLatin1());
još jedan obavezan parametar, api-key naše aplikacije, ovdje smo napisali
&api-key=stvarni-api-key-koji-dobijemo-na-flickr obavezan kod svakog poziva
Kod: Označi sve
QByteArray postData = O1::createQueryParameters(reqParams);
QNetworkRequest request(url);
request.setHeader(QNetworkRequest::ContentTypeHeader, O2_MIME_TYPE_XFORM);
QNetworkReply *reply = requestor->post(request, reqParams, postData);
connect(reply, SIGNAL(finished()), dole, SLOT( flikResponse() ) );
ovdje slažemo naše parametre zajedno s linkom u običan HTTP header, koristimo metodu POST objekta requestor (kako ga definira naš junak AKOS ). u naredbi connect ( reply , SIGNAL() , dole , SLOT() ) ovaj pointer
dole naprosto je THIS pointer na klasu . imao sam sreće da sam radio u multijezičnim projektima, i uvijek sam prkosio s hrvatskim riječima ( unatoč molbi i preklinjanju da koristim engleski). najslađa mi je zamka korištenje hrvatske riječi KOJI za index he he
s tim da sam ova tri objekta definirao na nivou klase, pa ih ne moram inicirati neprestano
Kod: Označi sve
O1 *o1;
QNetworkAccessManager *manager;
O1Requestor *requestor;
osnovni 'engine' Flickr klijenta je spreman. pali pilu !