作为研究项目的一部分,我正在创建一个仪表板来衡量各种Twitter帐户的用户参与度。吸引用户参与的主要因素是在Twitter上提及用户的次数。但是,我一直在努力寻找一种方法来计算在一周之内的某个时间里提到用户的次数。
方法1:
运行查询,该查询将在那时搜索文本为@handle
的推文。
这样做的问题在于,从单个查询中可以获取的最大结果数为100
。
方法2:
使用result.nextQuery()
多次运行查询,以100
的方式批量收集推文。
这样做的问题是,每天可以向用户提及20000次以上,但Twitter每15分钟仅允许180次请求到特定的API端点,并且一天仅允许特定次数。
此外,发出所有GET请求所花费的时间非常长。
方法3:
使用Twitter的流API将用户的提及信息打印到文件中,然后脚本将清除该脚本并定期将其移动到数据库中。
我认为这可以解决问题,但是我对运行与其父进程分开的子进程存有疑问-就像在服务器上运行跟踪程序一样。如果有人对其他方法有任何建议,我也将不胜感激。
我希望像这样启动在服务器上运行的跟踪器(一个JAR文件):
function initTracker(handle) {
console.log("Attempting to start tracking " + handle + "...");
var args = ['-jar', 'java/TweetTrack.jar', 'tracker', 'init', handle];
tracker = spawn('java', args);
if(tracker == null) {
console.log("ERROR");
return false;
}
else {
tracker.stdin.setEncoding('utf-8');
return true;
}
}
这会使用以下代码运行JAR:
TwitterStream twitterStream = new TwitterStreamFactory().getInstance();
twitterStream.addListener(listener)
twitterStream.sample();
isTracking = true;
此函数只是要求JAR返回isTracking:
function checkTracker(handle) {
console.log("Checking tracker " + handle + "...");
var args = ['-jar', 'java/TweetTrack.jar', 'tracker', 'status', handle];
tracker = spawn('java', args);
if(tracker == null) {
console.log("ERROR");
return false;
}
else {
tracker.stdin.setEncoding('utf-8');
return true;
}
}
我希望,如果启动跟踪器,它将继续在服务器上运行,并且如果我询问其状态,它将返回true。但是,我似乎无法继续进行下去。