Twitter 库的 fetchTweets() 方法接受哪些参数
What parameters will Twitter lib's fetchTweets() method accept
我在我的项目中使用 Agarwal's tutorial which uses the Twitter lib library for searching tweets. I'm using Twitterlib version 21 创建了一个用于转发和点赞推文的 Twitter 机器人。
它似乎大部分都有效,但我有一个特别的问题。当我在搜索中包含 "min_retweets:X" 参数时,它似乎无法被识别。这不是正式记录的搜索参数,但当您在网站上的正常 Twitter 搜索中使用它时它确实有效,并且 returns 仅转发了 X 次的推文。
如果我将 "min_retweets:X" 作为第一个搜索词,那么搜索将 return 没有结果。如果我将它作为最后一个搜索词,我会得到结果,但它们不限于已转发 X 次的推文。
我已经在 Twitterlib 中的 fetchtweets() 方法中搜索了一下,但目前我无法找出问题可能出在哪里。该库的第 21 版表示它已更新,可以使使用“:”的搜索正常工作,就我使用的其他一些搜索词而言,这似乎是准确的,但不是这个。还有一个 "min_faves:X" 参数,但我没有测试它是否适用于 Twitterlib 的搜索。
如果有人知道解决此问题的方法,我将不胜感激。下面是我用来调用该函数的代码以及来自 Twitter 库的函数本身的代码:
var tweets = twit.fetchTweets(
TWITTER_SEARCH_PHRASE, function(tweet) {
if (!tweet.possibly_sensitive) {
return tweet.id_str;
}
}, {
multi: true,
lang: "en",
count: 5,
since_id: props.getProperty("SINCE_TWITTER_ID")
});
OAuth.prototype.fetchTweets = function(search, tweet_processor, options) {
var tweets, response, result = [], data, i, candidate;
var phrase = encodeString('lang:' + (options && options.lang || 'en') + ' ' + encodeString(search).replace(/%3A/g, ":")); // English language by default
this.checkAccess();
if(options == null) {
options = {};
}
var url = [
"https://api.twitter.com/1.1/search/tweets.json?count=",
(options.count || "5"),
options.filter ? ("&filter=" + encodeString(options.filter)) : "",
"&include_entities=",
options.include_entities ? encodeString(options.include_entities) : "false",
"&result_type=",
options.result_type ? encodeString(options.result_type) : "recent",
"&q=",
phrase,
options.since_id ? "&since_id=" + encodeString(options.since_id) : ""
].join("");
var request_options =
{
"method": "get"
};
try {
response = this.fetch(url, request_options);
if (response.getResponseCode() === 200) {
data = JSON.parse(response.getContentText());
if (data) {
tweets = data.statuses;
if(!tweet_processor) {
return options && options.multi ? tweets : tweets[tweets.length - 1];
}
for (i=tweets.length-1; i>=0; i--) {
candidate = tweet_processor(tweets[i]);
if(candidate === true) candidate = tweets[i];
if(candidate) {
if(options && options.multi) {
result.push(candidate);
} else {
return candidate;
}
}
}
if(result.length) {
return result;
}
if(i < 0) {
Logger.log("No matching tweets this go-round");
}
}
} else {
Logger.log(response);
}
} catch (e) {
Logger.log(JSON.stringify(e));
throw e;
}
return result;
}
是的,看起来你已经发现了那个上的一个合法错误。如果您使用 min_retweets 搜索查询查看 运行 fetchTweets() 之后的执行记录,结果如下所示:
https://api.twitter.com/1.1/search/tweets.json?count=5&include_entities=false&result_type=recent&q=lang%3Aen%20min_retweets%3A100%2520swag
那个额外的 %25
是百分号本身被重新转义,它打破了查询。我将不得不回去全面重新检查所有特殊字符;我很确定有些必须双重转义,有些则不能。同时,这里有一个解决方法。您可以调用 twit.fetch 并直接将其提供给 URL,如下所示:
var tweets = JSON.parse(
twit.fetch(
"https://api.twitter.com/1.1/search/tweets.json?"
+ "count=5&result_type=recent&q="
+ Twitterlib.encodeString("lang:en min_retweets:100 #swag"),
{method: "get"}).getContentText("UTF-8")
).statuses;
当 v22 停止并解决您的问题时,我也会回来通知您。感谢您使用我的图书馆!
我检查了其他字符 (/#@;$,?=+) 并得到了它们各自的执行记录:
%252F%2523%2540%253B%2524%252C%253F%253D%252B
所以百分号正在重新转义。
仅对“:”有效。
在 fetchtweets 函数中:
var phrase = encodeString('lang:' + (options && options.lang || 'en') + ' ' + encodeString(search).replace(/%3A/g, ":"));
此处“:”被替换为正确的 %3A。也许为其他角色添加相同的内容也可以?
此外,解决方法脚本的执行时间太长,而且并不总是 return 最近的推文。我收到了大约 3 个月前发布的一些推文!
我在我的项目中使用 Agarwal's tutorial which uses the Twitter lib library for searching tweets. I'm using Twitterlib version 21 创建了一个用于转发和点赞推文的 Twitter 机器人。
它似乎大部分都有效,但我有一个特别的问题。当我在搜索中包含 "min_retweets:X" 参数时,它似乎无法被识别。这不是正式记录的搜索参数,但当您在网站上的正常 Twitter 搜索中使用它时它确实有效,并且 returns 仅转发了 X 次的推文。
如果我将 "min_retweets:X" 作为第一个搜索词,那么搜索将 return 没有结果。如果我将它作为最后一个搜索词,我会得到结果,但它们不限于已转发 X 次的推文。
我已经在 Twitterlib 中的 fetchtweets() 方法中搜索了一下,但目前我无法找出问题可能出在哪里。该库的第 21 版表示它已更新,可以使使用“:”的搜索正常工作,就我使用的其他一些搜索词而言,这似乎是准确的,但不是这个。还有一个 "min_faves:X" 参数,但我没有测试它是否适用于 Twitterlib 的搜索。
如果有人知道解决此问题的方法,我将不胜感激。下面是我用来调用该函数的代码以及来自 Twitter 库的函数本身的代码:
var tweets = twit.fetchTweets(
TWITTER_SEARCH_PHRASE, function(tweet) {
if (!tweet.possibly_sensitive) {
return tweet.id_str;
}
}, {
multi: true,
lang: "en",
count: 5,
since_id: props.getProperty("SINCE_TWITTER_ID")
});
OAuth.prototype.fetchTweets = function(search, tweet_processor, options) {
var tweets, response, result = [], data, i, candidate;
var phrase = encodeString('lang:' + (options && options.lang || 'en') + ' ' + encodeString(search).replace(/%3A/g, ":")); // English language by default
this.checkAccess();
if(options == null) {
options = {};
}
var url = [
"https://api.twitter.com/1.1/search/tweets.json?count=",
(options.count || "5"),
options.filter ? ("&filter=" + encodeString(options.filter)) : "",
"&include_entities=",
options.include_entities ? encodeString(options.include_entities) : "false",
"&result_type=",
options.result_type ? encodeString(options.result_type) : "recent",
"&q=",
phrase,
options.since_id ? "&since_id=" + encodeString(options.since_id) : ""
].join("");
var request_options =
{
"method": "get"
};
try {
response = this.fetch(url, request_options);
if (response.getResponseCode() === 200) {
data = JSON.parse(response.getContentText());
if (data) {
tweets = data.statuses;
if(!tweet_processor) {
return options && options.multi ? tweets : tweets[tweets.length - 1];
}
for (i=tweets.length-1; i>=0; i--) {
candidate = tweet_processor(tweets[i]);
if(candidate === true) candidate = tweets[i];
if(candidate) {
if(options && options.multi) {
result.push(candidate);
} else {
return candidate;
}
}
}
if(result.length) {
return result;
}
if(i < 0) {
Logger.log("No matching tweets this go-round");
}
}
} else {
Logger.log(response);
}
} catch (e) {
Logger.log(JSON.stringify(e));
throw e;
}
return result;
}
是的,看起来你已经发现了那个上的一个合法错误。如果您使用 min_retweets 搜索查询查看 运行 fetchTweets() 之后的执行记录,结果如下所示:
https://api.twitter.com/1.1/search/tweets.json?count=5&include_entities=false&result_type=recent&q=lang%3Aen%20min_retweets%3A100%2520swag
那个额外的 %25
是百分号本身被重新转义,它打破了查询。我将不得不回去全面重新检查所有特殊字符;我很确定有些必须双重转义,有些则不能。同时,这里有一个解决方法。您可以调用 twit.fetch 并直接将其提供给 URL,如下所示:
var tweets = JSON.parse(
twit.fetch(
"https://api.twitter.com/1.1/search/tweets.json?"
+ "count=5&result_type=recent&q="
+ Twitterlib.encodeString("lang:en min_retweets:100 #swag"),
{method: "get"}).getContentText("UTF-8")
).statuses;
当 v22 停止并解决您的问题时,我也会回来通知您。感谢您使用我的图书馆!
我检查了其他字符 (/#@;$,?=+) 并得到了它们各自的执行记录:
%252F%2523%2540%253B%2524%252C%253F%253D%252B
所以百分号正在重新转义。
仅对“:”有效。
在 fetchtweets 函数中:
var phrase = encodeString('lang:' + (options && options.lang || 'en') + ' ' + encodeString(search).replace(/%3A/g, ":"));
此处“:”被替换为正确的 %3A。也许为其他角色添加相同的内容也可以?
此外,解决方法脚本的执行时间太长,而且并不总是 return 最近的推文。我收到了大约 3 个月前发布的一些推文!