2012-05-03 3 views
10

J'ai travaillé sur un petit programme où je veux lire dans les sujets de tendance Twitter et les stocker dans une base de données. Actuellement, j'utilise la méthode twitter4j getDailyTrends(), mais en obtenant des résultats étranges.Vous utilisez les tendances quotidiennes de Twitter4j?

Le code que j'ai actuellement est:

 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()); 
         } 
     } 

Cependant, lorsque le programme est exécuté, il montre la même liste des tendances 24 fois. J'ai essayé d'exécuter le programme sur des jours différents, mais la liste est toujours identique, peu importe le jour où je lance le programme.

J'ai également essayé de passer la méthode getDailyTrends() à la date actuelle et j'ai obtenu les mêmes résultats.

J'apprécierais toute aide avec ça, ça me rend fou. :)

EDIT: L'ensemble de résultats que je reçois toujours affiche les tendances de twitter du 25.04.2012. Et peu importe quand je cours le programme, ou quelle date je le donne - j'obtiens ces mêmes résultats.

EDIT2: OK, donc cela m'a ennuyé toute la journée, j'ai finalement trouvé l'exemple de code fourni par twitter4j eux-mêmes pour la lecture des tendances. J'ai couru leur code au lieu du mien, et j'ai le même problème. Les tendances datent de quelques semaines et ne changent jamais. Est-ce que quelqu'un a réussi à faire fonctionner cette méthode auparavant?

Répondre

1

Je me souviens vaguement, mais pouvez-vous essayer les éléments suivants

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

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

     } 
+0

Merci pour la réponse. J'ai essayé ce que vous avez suggéré, et j'ai reçu la même liste de tendances que je reçois depuis des jours :( –

+0

Dans ce cas, je vous suggère de vérifier quelle version de Twitter4J vous utilisez et si ce n'est pas un bug de version. voir un bug pour que getAsOf renvoie une date incorrecte http://jira.twitter4j.org/browse/TFJ-613 Si ce n'est pas listé, je vous suggère de signaler un bug ici –

+0

J'utilisais la dernière version stable de twitter4j (2.2.5), j'ai essayé la version la plus récente de snapshot (2.2.6) et ai eu le même problème encore Je suis à court d'idées maintenant –

13
getPlaceTrends(int woeid) 

Renvoie les 10 sujets tendances haut pour une WOEID spécifique, si l'information est disponible pour une tendance elle.

woeid - Le Yahoo! Où sur la carte d'identité de l'emplacement pour retourner les informations de tendance pour. Les informations globales sont disponibles en utilisant 1 comme WOEID.

Vous pouvez obtenir les WOEID de de différents endroits avec le code ci-dessous

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() + ")"); 
} 

Et puis, vous pouvez obtenir les tendances actuelles d'un endroit précis en utilisant son WOEID comme ci-dessous

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

J'utilise twitter4j et ceci est ma classe pour obtenir des sujets de tendances de l'emplacement que vous obtenez en tant que paramètre, dans cet exemple "Espagne"

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; 
    } 

    } 
} 
Questions connexes