10

我一直在开发一个小程序,我想在其中阅读流行的 twitter 主题并将它们存储在数据库中。目前我正在使用 twitter4j getDailyTrends() 方法,但得到奇怪的结果。

我目前拥有的代码是:

        Twitter twitter = new TwitterFactory().getInstance();
        ResponseList<Trends> dailyTrends;

        dailyTrends = twitter.getDailyTrends();

        System.out.println();

        // Print the trends.
        for (Trends trends : dailyTrends) {
                    System.out.println("As of : " + trends.getAsOf());
                      for (Trend trend : trends.getTrends()) {
                            System.out.println(" " + trend.getName());
                       }
        }

但是,当程序运行时,它会显示相同的趋势列表 24 次。我曾尝试在不同的日子运行该程序,但是无论我在哪一天运行该程序,列表总是相同的。

我还尝试将当前日期传递给 getDailyTrends() 方法并获得相同的结果。

将不胜感激任何帮助,这让我发疯。:)

编辑:我不断得到的结果集显示了 25.04.2012 的 twitter 趋势。无论我何时运行程序,或者我给它的日期是什么 - 我都会得到相同的结果。

EDIT2:好的,所以这一直困扰着我一整天,我最终找到了 twitter4j 自己提供的示例代码,用于阅读趋势。我运行他们的代码而不是我的代码,我遇到了同样的问题。趋势是几周前的,并且永远不会改变。有没有人真正设法让这种方法工作过?

4

3 回答 3

15
getPlaceTrends(int woeid)

如果有可用的趋势信息,则返回特定WOEID的前 10 个趋势主题。

woeid - 雅虎!要返回其趋势信息的位置 ID。使用 1 作为WOEID可获得全局信息。

您可以使用以下代码获取不同位置的 WOEID

Twitter twitter = new TwitterFactory().getInstance();
ResponseList<Location> locations;
locations = twitter.getAvailableTrends();
System.out.println("Showing available trends");
for (Location location : locations) {
    System.out.println(location.getName() + " (woeid:" + location.getWoeid() + ")");
}

然后,您可以使用它的 WOEID 获取特定位置的当前趋势,如下所示

Trends trends = twitter.getPlaceTrends(2295414);
for (int i = 0; i < trends.getTrends().length; i++) {
    System.out.println(trends.getTrends()[i].getName());
}
于 2013-08-05T13:12:13.237 回答
5

我使用 twitter4j,这是我的课程,可以从您作为参数获取的位置获取趋势主题,在本例中为“西班牙”

import twitter4j.Location;
import twitter4j.ResponseList;
import twitter4j.Trends;
import twitter4j.Twitter;
import twitter4j.TwitterException;

public final class GetTrendingTopics {

    public static void main(String[] args) {

    try {

       ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setDebugEnabled(true).setOAuthConsumerKey("yourConsumerKey").setOAuthConsumerSecret("yourConsumerSecret").setOAuthAccessToken("yourOauthToken").setOAuthAccessTokenSecret("yourOauthTokenSecret");

        TwitterFactory tf = new TwitterFactory(cb.build());
        Twitter twitter = tf.getInstance();

        ResponseList<Location> locations;
        locations = twitter.getAvailableTrends();

        Integer idTrendLocation = getTrendLocationId("spain");

        if (idTrendLocation == null) {
        System.out.println("Trend Location Not Found");
        System.exit(0);
        }

        Trends trends = twitter.getPlaceTrends(idTrendLocation);
        for (int i = 0; i < trends.getTrends().length; i++) {
        System.out.println(trends.getTrends()[i].getName());
        }

        System.exit(0);

    } catch (TwitterException te) {
        te.printStackTrace();
        System.out.println("Failed to get trends: " + te.getMessage());
        System.exit(-1);
    }
    }

    private static Integer getTrendLocationId(String locationName) {

    int idTrendLocation = 0;

    try {

        ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setDebugEnabled(true).setOAuthConsumerKey("yourConsumerKey").setOAuthConsumerSecret("yourConsumerSecret").setOAuthAccessToken("yourOauthToken").setOAuthAccessTokenSecret("yourOauthTokenSecret");

        TwitterFactory tf = new TwitterFactory(cb.build());
        Twitter twitter = tf.getInstance();

        ResponseList<Location> locations;
        locations = twitter.getAvailableTrends();

        for (Location location : locations) {
        if (location.getName().toLowerCase().equals(locationName.toLowerCase())) {
            idTrendLocation = location.getWoeid();
            break;
        }
        }

        if (idTrendLocation > 0) {
        return idTrendLocation;
        }

        return null;

    } catch (TwitterException te) {
        te.printStackTrace();
        System.out.println("Failed to get trends: " + te.getMessage());
        return null;
    }

    }
}
于 2014-10-30T09:28:29.480 回答
1

我依稀记得,但你能试试以下

for (Trends trends : dailyTrends) {
                    System.out.println("As of : " + trends.getAsOf());

                     System.out.println(" " + trends.getTrendAt());

        }
于 2012-05-03T12:57:13.983 回答