[JS Applications] Как да се свържем с Twitter API 1.1 чрез OAuth SDK - Туториал


19

Мисля, че всички можем да се съгласим, че тази задача от домашното за Consuming Services е доста костелив орех. Тази вечер намерих една доста полезна библиотека, която поддържа OAuth authentication към всички от големите социални мрежи, както и някои от по-малките. API-то можете да намерите Тук

Първо, държа да отбележа, че не съм задълбавал много-много в технологията и подозирам, че използвам някой не особено добри практики, но колкото да се напише домашното върши работа, а и наистина са направили authentication-a към мрежите лесен и приятен.

Част 1. Prerequisites

Като за начало ви трябва акаунт в Twitter. За съжаление е задължителен, защото без него не можем да регистрираме Twitter Application в техния dev center. Ако нямате все още акаунт там, време е да си направите :D.

След като сте си създали акаунта, трябва да си създадем Twitter Application. Отивате на адрес https://dev.twitter.com/ логвате се в системата им, с username-a с който сте си създали акаунта (за съжаление работи само с username, не приемат e-mail) и избирате My Applications от падащото меню в горния десен ъгъл ->

Създавате си нов app от бутона Create new application. Системата ще ви попита за име и кратко описано на app-a, както и за website и callback. В полето за website можете да сложите какъвто и да е placeholder във формата http://www.placeholder.com. В полето за callback трябва да сложите следния линк - https://oauth.io/auth. След като си създадете app-a, системата ще ви пренасочи към неговите настройки. Следващата стъпка е да отидете в менюто API Keys на ващото приложение, и да си генерирате Token от полето Token actions. Следващата стъпка е да си регистрираме authorization ключовете в OAuth.io. Отивате на адреса и се логвате в системата (например с Twitter). След това избирате Dashboard от навигационното меню, избирате Browse Providers от бутоните в ляво и избирате Twitter. В следващата страница ще ви питат за вашия client_id и client_secret, тях можете да ги намерите в менюто API Keys на вашия Twitter App ->

След като запазите промените по приложените си в OAuth.io, ще ви пренасочат към страница, където се съдържа вашия Public Key чрез който ще достъпите OAuth API-то. Реално то действа като proxy между вашия javascript app и REST service-a на Twitter.

След като сме готови с настройките на всички приложения, е време да свалим OAuth API-то и да го нагалсим да работи с нашия код. Инструкции за свалянето му ще намерите Тук

Част 2. Използване на OAuth API

Държа да отбележа, че документацията на OAuth API-то не е от най-добрите и на мен лично ми отне известно време да схвана как точно да го накарам да сработи, като подозирам, че използвам някои доста лоши практики за изпълняване на request-и.

Документацията се намира Тук. Ще намерите примерния код който аз съм писал в края на туториала.

JavaScript приложението ни трябва да се пусне през наш сървър, иначе хвърля грешка. Няма значение дали сървъра е IIS, Apache или друг.

Така, след като сме си свалили API-то, трябва естествено да си го реферираме (ако ще го използвате с requirejs не е нужно да подавате променлива към него след като сте го реферирали). API-то се използва по следния начин ->

Първо се инициализира с Pulic Key-a който ни беше предоставен от приложението което регистрирахме в OAuth. За примера ще използвам произволен string :

OAuth.initialize('12345987asd12');

След това вече можем да позволим на потребителя да сайта ни да се логне чрез акаунта си в Twitter - за съжаление въпреки че имаме регистрирано приложение в Twitter, потребителя също трябва да притежава свой акаунт за да може да достъпва REST Api-то им.

Авторизирането се извършва чрез метода popup на OAuth обекта, като се подават provider-a - в нашия случай Twitter, и опционалния параметър options (JSON обект), който приема няколко параметъра, като този кйто ни интересува е cache. Чрез cache позволяваме да се кешира авторизацията, за да не се налага потребителя да се логва всеки път когато презареди страницата ->

var authPromise = OAuth.popup('twitter', {

    cache: true

});

authPromise обекта е promise, който има функция done() при успешно извикване и fail() при получена грешка. Съответно в done се подава callback функция с параметър result от авторизацията, чрез който можем да достъпваме REST API-то на Twitter ->

authPromise.done(function(result) {

    // do something with result

})

.fail(function(err) {

    // do something with error.

});

След което вече чрез получения result във done callback-a можем да достъпваме API-то на twitter ->

result.get('https://api.twitter.com/1.1/statuses/user_timeline.json')

Result обекта също връща promise, който се използва по същия начин като promise-a от authPromise (чрез done() и fail() ). Подаваме линка към service-a който искаме да консумираме чрез пълния му път и в done() функцията получаваме response-a в JSON формат, след което вече можем да го използваме безпроблемно.

Общо взето това е всичко за този туториал, отново повтарям, че най-вероятно OAuth API-то не трябва да се използва точно по този начин, но нямам много време да задълбавам в него. Колкото да се напише домашното върши работа. Не забрявайте да си пуснете javascript app-a чрез сървър, както и да нагласите Callback URL-a на Twitter Application-a към https://oauth.io/auth.

Тук можете да намерите линк към кода който аз съм писал.

Пожелавам ви успех, и ако ви е харесал туториала може да ме черпите една бира след изпита по JS Apps :D

P.S. Ако някой може да ми пише как се правят съкратените линкове във форума ще съм благодарен :D




Отговори



2

Отговор на P.S.-а - пишеш си някаква дума (или думи), които искаш да са ти линка. Например ЛИНК, ЦЪК, линк към twitter или там каквото си поискаш. След това маркираш това, което ще ти е линк ЛИНК  с мишката и цъкаш на иконката за линк горе вдясно (една планета с нещо под нея, нямам идея какво е). След като цъкнеш там и се отвори прозорчето, просто пействаш истинския линк в полето URL, даваш ок и си готов. Това което си маркирал преди това ще се оцвети в синьо и ще показва, че всъщност е линк 


от Vazzzz (1380 точки)


0
Супер, мерси :)

от NasC0 (489 точки)


0
Колега, много ти благодаря за туториала, много ми помогна, спести ми ровенето! С удоволствие бих те почерпила :)

от Tanya2013 (426 точки)