Javascript 如何在不输入递归的情况下请求twitter api
任何人都知道我如何在不使用递归的情况下基于文本查询向twitterapi发出请求 这是我的密码Javascript 如何在不输入递归的情况下请求twitter api,javascript,jquery,arrays,twitter,Javascript,Jquery,Arrays,Twitter,任何人都知道我如何在不使用递归的情况下基于文本查询向twitterapi发出请求 这是我的密码 function news_tweets(query, user_id, count) { news_array = []; user_tweets = []; full_array = []; $.getJSON("https://api.twitter.com/1/statuses/us
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(“hello”)或尝试连接两个数组时,所有操作都会执行三次。您似乎只有一个
news\u数组和user\u tweets
数组的实例。在这些应用程序上,推送api查询的所有结果。但是,您可以在循环中对整个数组调用combine\u arrays
函数(每次在搜索得到一组新的结果之后),在某些项目上运行多次
我想你在初始化
var user_tweets = [];
在find_tweets
函数中,会有一些帮助
您不能在回调之外访问ajax数据。相反,您将需要等待所有异步请求得到解决。我建议使用更容易处理此类事情的:
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
});
您似乎只有一个news\u数组
和user\u tweets
数组的实例。在这些应用程序上,推送api查询的所有结果。但是,您可以在循环中对整个数组调用combine\u arrays
函数(每次在搜索得到一组新的结果之后),在某些项目上运行多次
我想你在初始化
var user_tweets = [];
在find_tweets
函数中,会有一些帮助
您不能在回调之外访问ajax数据。相反,您将需要等待所有异步请求得到解决。我建议使用更容易处理此类事情的:
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
});
你到底想做什么?“连续请求”是什么意思?你是什么?您在哪里定义了用户推文?那个函数有什么用?我并没有什么特别的意思。我只是有一个新闻推文数组,我想从每个推文中获取文本,并在twitter中请求查找与该文本相关的推文,然后将其保存回另一个数组。问题是我想在不使用循环的情况下发出这些请求,我不知道“不使用循环”是什么意思?递归?如果你想运行这个数组,你需要其中一个(而且它们非常相似),问题是当我把它们放在一个div上之后,它们会多次出现,你到底想做什么?“连续请求”是什么意思?你是什么?您在哪里定义了用户推文?那个函数有什么用?我并没有什么特别的意思。我只是有一个新闻推文数组,我想从每个推文中获取文本,并在twitter中请求查找与该文本相关的推文,然后将其保存回另一个数组。问题是我想在不使用循环的情况下发出这些请求,我不知道“不使用循环”是什么意思?递归?如果你想运行这个数组,你需要一个(它们非常相似)问题是我把它们放在div上之后,它们会出现多次我只需要访问递归之外的user_tweets数组你没有任何递归?你还没有解释你真正想要做什么。我想访问那些变量,比如user,date,在$.getJSON回调函数外部配置\u img,并将其存储到用户\u tweets数组中。现在一切都清楚了!!!!忘记组合数组(新闻数组、用户tweets);看来你什么都知道!但是如何获得完整的_数组?我是否用这一行调用函数news_tweets(…).done(函数回调(full_数组){console.log(full_数组)});我只需要访问递归之外的user_tweets数组您没有任何递归?您仍然没有解释您实际想要做什么。我想访问$getJSON回调函数之外的user、date、profile_img等变量,并将它们存储到user_tweets数组中。现在一切都清楚了!!!!忘记组合数组(新闻数组、用户tweets);看来你什么都知道!但是如何获得完整的_数组?我是否用这一行调用函数news_tweets(…).done(函数回调(full_数组){console.log(full_数组)});