javascript - plugin - Obtén Twitter Feed como JSON sin autenticación
twitter button about (8)
Escribí un pequeño JavaScript hace un par de años que capturó el tweet más reciente de los usuarios (el mío) y luego lo analicé para mostrarlo, incluyendo enlaces, fechas, etc.
Utilizó esta llamada json para recuperar los tweets y ya no funciona.
http://twitter.com/statuses/user_timeline/radfan.json
Ahora devuelve el error:
{"errors":[{"message":"Sorry, that page does not exist","code":34}]}
He analizado el uso de la versión api (código a continuación), pero esto requiere una autenticación que preferiría evitar tener que hacer, ya que es solo para mostrar mi último tweet en mi sitio web, que es público de todos modos en mi página de perfil:
http://api.twitter.com/1/statuses/radfan.json
No me he mantenido al tanto de los cambios en la API de Twitter porque ya no trabajo realmente, ¿hay alguna forma de solucionar este problema o ya no es posible?
Anteriormente, la API de búsqueda era la única API de Twitter que no requería algún tipo de OAuth . Ahora sí requiere autenticación.
La API de búsqueda de Twitter se adquiere a partir de una adquisición de terceros: rara vez la admiten y, al parecer, no están sin sentido de que exista. Además de eso, hay muchas limitaciones a la carga útil, que incluyen pero no se limitan a un conjunto muy reducido de pares clave: valor en el archivo JSON o XML que recibe.
Cuando escuché esto, me sorprendió. Pasé mucho tiempo pensando cómo usar la menor cantidad de código para hacer una simple solicitud GET (como mostrar una línea de tiempo).
Decidí tomar la ruta OAuth para poder garantizar una carga útil relevante. Necesita un lenguaje de servidor para hacer esto. JavaScript es visible para los usuarios finales, por lo que es una mala idea incluir las claves y los secretos necesarios en un archivo .js.
No quería usar una gran biblioteca, por lo que la respuesta para mí fue PHP y la ayuda de la respuesta de @Rivers here . La respuesta debajo de @ lackovic10 describe cómo incluir consultas en su autenticación.
Espero que esto ayude a otros a ahorrar tiempo pensando en cómo utilizar la API de Twitter con el nuevo requisito de OAuth .
Aquí hay un hack rápido (realmente un hack, debe usarse con precaución ya que no es una prueba de futuro) que utiliza http://anyorigin.com para raspar el sitio de Twitter para los últimos tweets.
http://codepen.io/JonOlick/pen/XJaXBd
Funciona usando anyorigin (tienes que pagar para usarlo) para capturar el HTML. Luego analiza el HTML usando jquery para extraer los tweets relevantes.
Los tweets en el sitio móvil usan un div con la clase .tweet-text, así que esto es bastante indoloro.
El código relevante se ve así:
$.getJSON(''http://anyorigin.com/get?url=mobile.twitter.com/JonOlick&callback=?'', function(data){
// Remap ... utf8 encoding to ascii.
var bar = data.contents;
bar = bar.replace(/…/g, ''...'');
var el = $( ''<div></div>'' );
el.html(bar);
// Change all links to point back at twitter
$(''.twitter-atreply'', el).each(function(i){
$(this).attr(''href'', "https://twitter.com" + $(this).attr(''href''))
});
// For all tweets
$(''.tweet-text'', el).each(function(i){
// We only care about the first 4 tweets
if(i < 4) {
var foo = $(this).html();
$(''#test'').html($(''#test'').html() + "<div class=ProfileTweet><div class=ProfileTweet-contents>" + foo + "</div></div><br>");
}
});
});
Como puede ver en la documentación , para usar la API REST necesitará los token OAuth para hacer esto. Afortunadamente, podemos usar la búsqueda (que no usa OAuth) y usar el operador from:[USERNAME]
Ejemplo: http://search.twitter.com/search.json?q=from:marcofolio
Te dará un objeto JSON con tweets de ese usuario, donde
object.results[0]
Te daré el último tweet.
El método "GET statuses / user_timeline" necesita una autenticación de usuario como se puede ver en la documentación oficial:
Puede utilizar el método de búsqueda "OBTENER búsqueda" que no requiere autenticación.
Tiene un código para comenzar aquí: http://jsfiddle.net/73L4c/6/
function searchTwitter(query) {
$.ajax({
url: ''http://search.twitter.com/search.json?'' + jQuery.param(query),
dataType: ''jsonp'',
success: function(data) {
var tweets = $(''#tweets'');
tweets.html('''');
for (res in data[''results'']) {
tweets.append(''<div>'' + data[''results''][res][''from_user''] + '' wrote: <p>'' + data[''results''][res][''text''] + ''</p></div><br />'');
}
}
});
}
$(document).ready(function() {
$(''#submit'').click(function() {
var params = {
q: $(''#query'').val(),
rpp: 5
};
// alert(jQuery.param(params));
searchTwitter(params);
});
})
Puede acceder y eliminar Twitter a través de la búsqueda avanzada sin haber iniciado sesión:
Solicitud GET
Al realizar una solicitud de búsqueda básica se obtiene:
https://twitter.com/search?q=Babylon%205&src=typd
- q (nuestra consulta codificada)
- src (se supone que es el origen de la consulta, es decir, se escribe)
De forma predeterminada, Twitter devuelve los 25 mejores resultados, pero si hace clic en all
, puede obtener los tweets en tiempo real:
https://twitter.com/search?f=realtime&q=Babylon%205&src=typd
Contenidos JSON
Más tweets se cargan en la página a través de AJAX:
https://twitter.com/i/search/timeline?f=realtime&q=Babylon%205&src=typd&include_available_features=1&include_entities=1&last_note_ts=85&max_position=TWEET-553069642609344512-553159310448918528-BD1UO2FFu9QAAAAAAAAETAAAAAcAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Usa max_position
para solicitar los siguientes tweets.
La siguiente matriz json devuelve todo lo que necesita para raspar el contenido:
https://twitter.com/i/search/timeline?f=realtime&q=Babylon%205&src=typd
- has_more_items (bool)
- items_html (html)
- max_position (clave)
- refresh_cursor (clave)
Elementos DOM
Aquí viene una lista de DOM elements
que puede utilizar para extraer
Los autores manejan twitter.
div.original-tweet[data-tweet-id]
El nombre del autor
div.original-tweet[data-name]
El ID de usuario del autor.
div.original-tweet[data-user-id]
Marca de tiempo del post
span._timestamp[data-time]
Marca de tiempo del post en ms
span._timestamp[data-time-ms]
Texto de Tweet
p.tweet-text
Número de retweets
span.ProfileTweet-action–retweet > span.ProfileTweet-actionCount[data-tweet-stat-count]
Número de Favo
span.ProfileTweet-action–favorite > span.ProfileTweet-actionCount[data-tweet-stat-count]
Recursos
Si aún está buscando tweets no autenticados en JSON, esto debería funcionar: https://github.com/cosmocatalano/tweet-2-json
Twitter se movió a un sistema OAuth para la mayoría de las llamadas a la API. También hicieron algunas tareas de limpieza que pueden haber afectado esto: https://dev.twitter.com/discussions/10803