我认为 twitter4j 足以满足你的所有条件。您可以在 twitter4J 中使用流媒体。如果你不给它一个过滤参数,它会给你一个推文流。例如;
条件 1)当您从流媒体中获取推文时,您可以查看 media_entity 部分以检查是否存在至少一个媒体对象并且其类型为图像。如果是这样,您可以将其保存在任何数据库的表中。
例如:
MediaEntity[] mediaEntities = status.getMediaEntities();
for (MediaEntity mediaEntity : mediaEntities)
if (mediaEntity.getType() == "photo")
{
// Save status object which has the tweet and its metadata
break;
}
条件2)每条推文都有一个唯一的推文ID,另一件事是流应用程序不能为同一条推文点击两次。但是,如果您独立运行两个不同的流媒体应用程序,则这两个应用程序可能会点击相同的推文。即使您运行两个应用程序,您也可以在保存之前检查数据库表中的推文 ID。
条件3)(详细说明你的意思!)据我所知,Twitter 中还没有像 Facebook 那样的评论机制。如果您指的是转推,您可以使用 Twitter4J 的另一个应用程序同时搜索特定推文的转推。
条件 4)我不知道 Hosebird 客户端系统,但我知道并经常使用 Twitter4J。我可以说 Twitter4J 是一个纯粹的基于 Java 的系统。您需要使用的只是添加 jar 文件作为对您的 java 应用程序的引用,它就可以使用了。这很简单。
条件 5)我为我的流媒体应用程序提供了一组关键字,以捕获包含特定关键字或主题标签的推文。在您的情况下,您可能不提供任何参数,这意味着流应用程序将在没有任何条件的情况下捕获所有推文。为此,可以以我的过滤机制为例:
FilterQuery fq = new FilterQuery();
String keywords[] = {"sport", "politics", "health"}; //etc..
fq.track(keywords);
twitterStream.addListener(statusListener);
twitterStream.filter(fq);
最后,我在下面粘贴了一个完整的 java 方法,说明如何使用它作为示例。我希望它对你有帮助。:D
private static void GetTweetStreamForKeywords()
{
TwitterStream twitterStream = new TwitterStreamFactory(config).getInstance();
StatusListener statusListener = new StatusListener() {
@Override
public void onStatus(Status status) {
// The main section that you get the tweet. You can access it by status object.
// You can save it in a database table.
}
@Override
public void onDeletionNotice(StatusDeletionNotice sdn) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void onTrackLimitationNotice(int i) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void onScrubGeo(long l, long l1) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void onStallWarning(StallWarning sw) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void onException(Exception ex) {
logWriter.WriteErrorLog(ex, "onException()");
}
};
FilterQuery fq = new FilterQuery();
String keywords[] = {"sport", "politics", "health"};
fq.track(keywords);
twitterStream.addListener(statusListener);
twitterStream.filter(fq);
}