Использование AJAX для доступа к API Twitter - PullRequest
0 голосов
/ 07 февраля 2011

Я думаю о добавлении некоторых функций Twitter в свое веб-приложение, поэтому я начал делать некоторые тесты. Я проверил способ вызова поискового твиттера URL (дополнительная информация: http://dev.twitter.com/doc/get/search), чтобы получить твиты, содержащие искомое слово / предложение. Я понял, что вы можете сделать это в php, просто получив файл JSON, который URL-адрес поиска возвращается с функцией * 1003. * Также вы можете сделать это непосредственно в JavaScript, создав объект сценария, добавив его в тело и используя параметр обратного вызова URL-адреса поиска для обработки данных.

Различные способы сделать это, но я наконец-то так и сделал:


ГЛАВНЫЙ ФАЙЛ HTML:

<title>Twitter API  JSON</title>

<script type="text/javascript">

    //function that created the AJAX object
function newAjax(){
      var xmlhttp=false;
      try {
         xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e) {
         try {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
         } catch (E) {
            xmlhttp = false;
         }
      }
      if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
         xmlhttp = new XMLHttpRequest();
      }
   return xmlhttp;
}  

//function that search the tweets containing an specific word/sentence
function gettweets(){

      ajax = newAjax();

     //ajax call to a php file that will search  the tweets
      ajax.open( 'GET', 'getsearch.php', true);

      // Process the data when the ajax object changes its state
      ajax.onreadystatechange = function() {
         if( ajax.readyState == 4 ) {
            if ( ajax.status ==200 ) {  //no problem has been detected

        res = ajax.responseText;
        //use eval to format the data
        searchres = eval("(" + res + ")");

        resdiv = document.getElementById("result");
                    //insert the first 10 items(user and tweet text) in the div
        for(i=0;i<10;i++){
            resdiv.innerHTML += searchres.results[i].from_user+' says:<BR>'+searchres.results[i].text+'<BR><BR>';
        }


            }
         }
      }

    ajax.send(null);
}  //end gettweets function

</script>




#search_word Tweets
<input type="button" onclick="gettweets();"value="search" />
<div id="result">
<BR>
</div>


</html>

PHP, ГДЕ МЫ ПОЛУЧАЕМ ДАННЫЕ JSON:

$jsonurl = "http://search.twitter.com/search.json?q=%23search_word&rpp=10";

$json = file_get_contents($jsonurl,0,null,null);

echo $json;

И это все, так работает нормально. Я вызываю файл PHP, он возвращает данные JSON, извлеченные из URL-адреса поиска, и в основных функциях JavaScript HTML я вставляю твиты в div. Проблема в том, что в первый раз я пытался сделать это напрямую в JavaScript, вызывая поисковый URL с помощью Ajax, например:

ГЛАВНЫЙ ФАЙЛ HTML:

//same code above

//ajax call to a php file that will search  the tweets
ajax.open( 'GET', 'http://search.twitter.com/search.json?q=%23search_word&rpp=10', true);

//same code above

Я думал, что это должно вернуть данные JSON, но это не так. Мне интересно, почему нет, и это то, что я хотел бы спросить. Кто-нибудь имеет представление о том, почему я не могу получить данные JSON, используя объект Ajax? Если поисковый URL http://search.twitter.com/search.json?q=%23search_word&rpp=10 возвращает данные JSON, они должны быть получены в объекте ajax, верно?

Ответы [ 2 ]

1 голос
/ 07 февраля 2011

XHR-запросы, как правило, ограничиваются запросами в одном домене;например, если вы находитесь на сайте bertsbees.com, вы не можете использовать метод Ajax для извлечения данных из twitter.com.

При этом API Twitter поддерживает популярный метод передачи данных, известный как JSON-Pчто на самом деле просто прославленная техника инъекций.Вы просто передаете ему метод обратного вызова, и возвращенные данные будут обернуты в нужную вам функцию, поэтому она будет обработана и передана в eval'd.

0 голосов
/ 07 февраля 2011

Вы не можете сделать междоменный запрос, используя javascript, если вы не делаете из аддона браузера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...