Подтвердить что ты не робот

Получите Twitter-канал как JSON без аутентификации

Несколько лет назад я написал небольшой JavaScript, который схватил последнее (т.н.) пользователей, а затем разобрал его для отображения, включая ссылки, дату и т.д.

Он использовал этот json-вызов для извлечения твитов, и он больше не работает.

http://twitter.com/statuses/user_timeline/radfan.json

Теперь он возвращает ошибку:

{"errors":[{"message":"Sorry, that page does not exist","code":34}]}

Я рассмотрел использование версии api (код ниже), но для этого требуется аутентификация, которую я бы предпочел избежать, поскольку она просто отображает мой последний твит на моем веб-сайте, который является общедоступным на моей странице профиля:

http://api.twitter.com/1/statuses/radfan.json

Я не поддерживал изменения в API Twitter, поскольку я больше не работаю с ним, есть ли способ обойти эту проблему или это уже невозможно?

4b9b3361

Ответ 1

Как вы можете видеть в документации, используя REST API, вам понадобится OAuth Tokens, чтобы сделать это. К счастью, мы можем использовать Поиск (который не использует OAuth) и использовать оператор from:[USERNAME]

Пример: http://search.twitter.com/search.json?q=from:marcofolio
Дает вам объект JSON с твитами от этого пользователя, где

object.results[0]

предоставит вам последний твит.

Ответ 2

Раньше API поиска был единственным API-интерфейсом Twitter, который не требовал какой-либо формы OAuth. Теперь для этого требуется auth.

Twitter API поиска приобретается у стороннего приобретения - они редко поддерживают его и, по-видимому, не используют его, даже если он существует. Кроме того, существует множество ограничений для полезной нагрузки, включая, но не ограничиваясь, сильно уменьшенный набор пар key: value в JSON или XML, который вы вернетесь.

Когда я услышал это, я был в шоке. Я потратил много времени на выяснение того, как использовать минимальное количество кода для простого запроса GET (например, отображения временной шкалы).

Я решил пойти по маршруту OAuth, чтобы обеспечить соответствующую полезную нагрузку. Для этого вам нужен серверный язык. JavaScript отображается конечным пользователям, и, следовательно, это плохая идея включить в <.sys файл > ключи и секреты.

Я не хотел использовать большую библиотеку, поэтому для меня был ответ PHP и помощь от ответа @Rivers здесь. Ответ под ним @lackovic10 описывает, как включать запросы в вашу аутентификацию.

Надеюсь, это поможет другим сэкономить время, думая о том, как использовать API Twitter с новым требованием OAuth.

Ответ 3

Вы можете получить доступ и очистить Twitter через расширенный поиск без входа в систему:

Запрос GET

При выполнении основного запроса поиска вы получаете:

https://twitter.com/search?q=Babylon%205&src=typd
  • q (наш запрос закодирован)
  • src (предполагается, что он является источником запроса, т.е. введенным)

по умолчанию, Twitter возвращает 25 результатов, но если вы нажмете all вы можете получить твиты в реальном времени:

https://twitter.com/search?f=realtime&q=Babylon%205&src=typd

Содержимое JSON

Дополнительные твиты загружаются на страницу через 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

Используйте max_position для запроса следующих твитов

Следующий массив json возвращает все, что вам нужно, чтобы очистить содержимое:

https://twitter.com/i/search/timeline?f=realtime&q=Babylon%205&src=typd
  • has_more_items (bool)
  • items_html (html)
  • max_position (ключ)
  • refresh_cursor (ключ)

Элементы DOM

Вот список DOM elements, который вы можете использовать для извлечения

Авторы twitter handle

div.original-tweet[data-tweet-id]   

Имя автора

div.original-tweet[data-name]

Идентификатор пользователя автора

div.original-tweet[data-user-id]    

Отметка времени публикации

span._timestamp[data-time]  

Временная метка сообщения в ms

span._timestamp[data-time-ms]

Текст Tweet

p.tweet-text

Число Retweets

span.ProfileTweet-action–retweet > span.ProfileTweet-actionCount[data-tweet-stat-count] 

Число Favo

span.ProfileTweet-action–favorite > span.ProfileTweet-actionCount[data-tweet-stat-count]    

Ресурсы

Ответ 4

Twitter перешел в систему OAuth для большинства вызовов API. Они также сделали некоторые работы, которые могли повлиять на это - https://dev.twitter.com/discussions/10803

Ответ 6

Вы можете использовать twitter api v1 для приема твитов без использования OAuth. Например: эта ссылка включает @jack последние 100 твитов.

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

Ответ 7

Вот быстрый взломать (на самом деле взломать, следует использовать с осторожностью, поскольку это не будущее доказательство), который использует http://anyorigin.com, чтобы очистить twitter для последних твитов.

http://codepen.io/JonOlick/pen/XJaXBd

Он работает, используя anyorigin (вы должны заплатить за его использование), чтобы захватить HTML. Затем он анализирует HTML, используя jquery, чтобы извлечь соответствующие твиты.

Твиты на мобильном сайте используют div с классом .tweet-text, поэтому это довольно безболезненно.

Соответствующий код выглядит следующим образом:

$.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>");
    }
  });

});

Ответ 8

Метод "GET statuses/user_timeline" нуждается в аутентификации пользователя, как вы можете видеть в официальной документации:

Вы можете использовать метод поиска "GET search", для которого не требуется аутентификация.

У вас есть код для запуска здесь: 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);
    });
})