[JS Applications] Twitter API домашно.


6

Някой да е открил начин да се направи това?

Според техния сайт https://dev.twitter.com/docs/api/1.1/get/statuses/user_timeline

"User timelines belonging to protected users may only be requested when the authenticated user either "owns" the timeline or is an approved follower of the owner."

Ако пробвам това:

https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=Telerik

Получавам това:
{"errors":[{"message":"Bad Authentication data","code":215}]}

Трябва да се направи account на Tweeter, след което да се направи Tweeter App. Този аpp ще ви даде ключ, с който ще можете да ползвате API-to. След което трябва да научите какво е oAuth и как се използва. Ако стигнете до тук, ще разберете, че можете да работите само с потребители, които следите :) и с вашия Тweeter.

Tweeter са си сменили API-то и тази задача мисля, че не може вече да бъде изпълнена и Tweeter API трябва да бъде променено с друго API :)

Предложение: http://openweathermap.org/API




Отговори



0

Аз също получих тази грешка. Променили са начина на достъпване, би трябвало пак да може. Сега и аз чета и до тук разбрах, че трябва да плозваме  OAuth.

Така определено се усложнява задачата :) 

https://dev.twitter.com/docs/auth/oauth

 




3
Очевидно задачата е от миналата академия и никой не си е направил труда да провери, че от миналото лято апито на туитър е станало не толкова публично... Сега иска сървърна ауторизация, което значи, че трябва да пишеш node сървър и т.н. Аз лично намерих някакъв workaround и го ползвай него, но често казано при проверката на домашни, точно тази ще я игнорирам.

от dani_ddd (346 точки)


1
Има някакъв workaround в нет-а
http://codepen.io/jasonmayes/pen/Ioype



0
Това е HTML parser.

от lithical (992 точки)

0
да, усетих, няма нищо общо с REST API, явно трябва да се напише съвър-а, видях че има някакви готови npm packages за ползване, не съм ги тест-вал още, ако на някой му се занимава да ги разцъка да види как се правят нещата :) https://www.npmjs.org/package/node-twitter-api, https://www.npmjs.org/package/twitter




3

И аз мисля че е станало точно това - че задачата е била от миналогодишната академия.
Предлагам 1 просто решение - да направим същата задача, ама с Facebook или някакъв друг подобен сайт. Важното е да упражним някакво умение и познание, а не това кой точно сайт човъркаме. Аз лично смятам да опитам да направя точно това.


от lokiko91 (790 точки)


9

Здравейте,

един workaround, който улеснява и целта му е да избегне позлването на новото API на Twitter (версия 1.1) от Jason Mayes (споменат по-горе).

Това е GitHub Repository-то на кода: https://github.com/jasonmayes/Twitter-Post-Fetcher

Накратко стъпките:

  1. Създавате си Widget в Twitter: https://twitter.com/settings/widgets -> Create new -> Create widget
  2. Вземате widged-id от генерирания HTML по-долу или от адреса
  3. Реферирате twitterFetcher.js във вашият html файл и след това в едно IIFE примерно, използвате по следният начин:
    twitterFetcher.fetch(widgetId, tweetsContainerId, numberOfTweetsToTake,
                         useLinks, showProfilePicture, showDateOnPosted);
 
    twitterFetcher.fetch('345690956013633536', 'twitter-container', 100,
                         true, true, true);
 
* twitterFetcher е глобален обект
* tweetsContainerId e HTML елемента, в който ще се генерира HTML-a
* Можете да използвате готов CSS: http://goo.gl/hKg0n5
* Стартирате на сървър (Visual Studio, NodeJS, WebStorm)

от martin.nikolov (4535 точки)


0
Това е от сайта му: "Allows you to get your tweets displaying on your website using JavaScript, without using new Twitter 1.1 API" или без използването на Twitter API, което задачата изисква ;)

от lithical (992 точки)

0
Добре де, никой не те кара да работиш с новото API, тоя код горе използва старото API. И преди да пишеш нещо, вземи прочети, не минавай само между редовете.
"With that out of the way, I hope you enjoy this component, and that it makes your life a bit easier." - Защо да си усложняваме живота със "супер API-то на Twitter", като има един човек, който е създал това да направи работата ни по-лесна? И с каква злоба праскаш тези минуси? Рейтинг ли гониш?

от martin.nikolov (4535 точки)



0

Има начин да се заобиколи OAuth. Всичти тези библиотеки използват Web Intents. Тоест вграждате tweets като widget. Това на практика си е iframe мисля. Могат да се правят чрез класове inline или през twttr.widgets.createTimeline и се задават опциите като JSON. Може да пишете направо inline в HTML ,но на мен не ми изглежда добре. Даден е следния пример, но първо трябва да я добавите от //platform.twitter.com/widgets.js:

twttr.widgets.createTimeline(
  '123456',
  document.getElementById('timeline'),
  {
    width: '450',
    height: '700',
    related: 'benward,endform,brianellin'
  }).then(function (el) {
    console.log("Embedded a timeline.")
  });

. Вижте този линк https://dev.twitter.com/docs/tfw това е единия начин. До колкото разбирам библиотеката прави

https://twitter.com/intent/user?screen_name=NASA

с promise и след това прави iframe. 

Другият начин който се сещам е чрез OEmbed. При него невидях как се взема timeline, а само един tweet който е JSON. Например с GET

https://api.twitter.com/1/statuses/oembed.json?id=99530515043983360

 


от blastology (62 точки)


8

Предоставям ви един сървър написан на NodeJS , който ще улесни работата ви с Twitter API , но все пак трябва да се регистрирате като https://dev.twitter.com/ и да използвате ключовете предоставени от тях . 

Github link

След като свалите сървъра отивате в папката Twitter-NodeJSServer , зареждате конзолата в тази директория и е необходимо да изпълните "npm install" за да може да се свалят библиотеките на които депендва сервера . След това отновото в козолата пишете "node index.js" и вече сървъра е стартиран , като работи на порт 3000.

Сървъра предоставя възможност за POST заявка към линк http://localhost:3000/tweets , като въпросният линк връща туитовете на човека във JSON формат ( за да ги получите като обект трябва да парснете от JSON получените данни ( JSON.parse(данните); ). 

За да работи апи-то и сървърът да приеме вашата заявка на горе посочения линк вие трябва да изпратите следните данни 

{
 "consumerKey": "<вашият consumerKey>",
"consumerSecret": "<вашият consumerSecret>"",
"accessToken": "<вашият accessToken>"",
 "accessTokenSecret": "<вашият accessTokenSecret>"",
"username" : "<Username на потребитяля чийто постове взимате>",
"count" : "<броят постове които искате да вземете>"
}

 


от TeodorTunev (3061 точки)


0
Здравей, колега. Първо благодаря ти за сървъра. Имаш ли някаква идея защо ми дава "Bad Authentication data" въпреки, че съм направил всичко уж както трябва?

от a.dimitrov (1047 точки)

0
Най вероятно си объркал някой от ключовете за да ти ги дава нещата така , провери между кавичките дали нямаш някое разтояните , това което съм дал <> тези съмволи ги няма - Пример "consumerKey": "jaskld34312asjklasd1248". Аз съм го тествал през различен проект със UI който праща към сервера и работи , ако искаш качи някакъв код със заявката която пращаш за да видя за някаква грешка

от TeodorTunev (3061 точки)



2

Аз си поиграх с "библиотеката" на Jasson Mayes. Даже очовечих част от кода зада разбера какво точно прави. За съжаление не можеш просто да си избереш човек по ник-а му в twitter, а трябва да се правят малко магии с widget-ите. Но като за демо става.

Ей го на и кода


от JulianG (5316 точки)


0
То това пак прави intent.

от blastology (62 точки)