2012-09-16 74 views
1

任何人都知道如何根據文本查詢向twitter api發出請求,而無需使用遞歸。如何在不輸入遞歸的情況下請求twitter api

這是我的代碼

 function news_tweets(query, user_id, count) { 
      news_array = []; 
      user_tweets = []; 
      full_array = []; 
      $.getJSON("https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=false&user_id=" + user_id + 
      "&count=" + count + "&callback=?", 

      function (data) { 
       $.each(data, function (i, item) { 
        var user = item.user.name; 
        var date = item.created_at; 
        var profile_img = item.user.profile_image_url; 
        var text = item.text; 
        var url = (item.entities.urls.length > 0 ? item.entities.urls[0].url : ''); 
        news_array.push({ 
         news_user: user, 
         news_date: date, 
         news_profile_img: profile_img, 
         news_text: text, 
         news_url: url 
        }); 
       }); 
       find_tweets(news_array); 

      }); 
     } 

     function find_tweets(news_array) { 
      for (var i in news_array) { 
       var news_text = news_array[i].news_text; 
       $.getJSON("http://search.twitter.com/search.json?q=" + news_text + 
       "&rpp=10&include_entities=true&result_type=mixed&callback=?", 

       function (data) { 
        $.each(data.results, function (i, item) { 
         var user = item.from_user; 
         var user_id = item.from_user_id; 
         var date = item.created_at; 
         var user_profile_img = item.profile_image_url; 
         var text = item.text; 
         var url = (item.entities.urls.length > 0 ? item.entities.urls[0].url : ''); 
         user_tweets.push({ 
          user: user, 
          user_id: user_id, 
          date: date, 
          user_profile_img: user_profile_img, 
          text: text 
         }); 
        }); 
        combine_arrays(news_array, user_tweets); 
       }); 
      } 

      function combine_arrays(news_array, user_tweets) { 
       full_array = news_array.concat(user_tweets); console.log(full_array); 
       } 

      } 

當我使用的console.log(「你好」),或嘗試將兩個數組都執行三次連接。

+0

什麼是你真正想幹什麼? 「連續請求」是什麼意思? – Bergi

+0

你是什麼'news_array'?你在哪裏定義了'user_tweets'? functin'tweets'有什麼好處? – Bergi

+0

我不特別說什麼。我只是有一個新聞推文數組,我想從每個推文中獲取文本,並在twitter中發出請求以查找與該文本相關的推文並將其保存回另一個數組。事情是我想讓這些請求不使用循環,我不知道如何 –

回答

1

您似乎只有news_arrayuser_tweets陣列的一個實例。在這些上,你推送你的API查詢的所有結果。然而,你可以從循環中調用整個數組的combine_arrays函數(每次搜索給你一組新的結果) - 在一些項目上運行多次。

我想重新初始化

var user_tweets = []; 

find_tweets函數內部將有助於東西。


您無法訪問回調之外的ajax數據。相反,您需要等到所有異步請求都解決爲止。我建議使用jQuery's Deferred object這使得處理這類事情要容易得多:

function news_tweets(query, user_id, count) { 
    var news_array = [], 
     user_tweets = []; 
    return $.getJSON("https://api.twitter.com/1/statuses/user_timeline.json", { 
     include_entities: "true", 
     include_rts: "false", 
     user_i: user_id, 
     count: count 
    }).then(function (data) { 
     return $.when.apply(null, $.map(data, function (item) { 
      news_array.push({ 
       news_user: item.user.name, 
       news_date: item.created_at, 
       news_profile_img: item.user.profile_image_url, 
       news_text: item.text, 
       news_url: item.entities.urls.length ? item.entities.urls[0].url : '' 
      }); 
      return $.getJSON("http://search.twitter.com/search.json", { 
       q: item.text, 
       rpp: 10, 
       include_entities: "true", 
       result_type: "mixed" 
      }).done(function (data) { 
       $.each(data.results, function (i, item) { 
        user_tweets.push({ 
         user: item.from_user, 
         user_id: item.from_user_id, 
         date: item.created_at, 
         user_profile_img: item.entities.urls.length ? item.entities.urls[0].url : '', 
         text: item.text 
        }); 
       }); 
      }); 
     })); 
    }).then(function() { 
     // this callback is executed [once] when all requests are done 
     // and the user_tweets array is filled 
     // arguments is an array of all search request results 
     var full_array = news_array.concat(user_tweets); 
     console.log(full_array); 
     return full_array; 
    }) 
} 

用法:

news_tweets(…).done(function callback(full_array) { 
    // do something with all the objects 
}); 
+0

我只需要訪問遞歸外的user_tweets數組 –

+0

你沒有任何遞歸? – Bergi

+0

所以你建議做什麼? –

相關問題