2012-05-03 11 views
10

Ho lavorato su un piccolo programma in cui voglio leggere argomenti trending su Twitter e archiviarli in un database. Attualmente sto usando il metodo twitter4j getDailyTrends(), ma sto ottenendo risultati strani.Utilizzo delle tendenze quotidiane di Twitter4j?

Il codice ho attualmente è:

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

Tuttavia, quando il programma viene eseguito, mostra lo stesso elenco di tendenze 24 volte. Ho provato a eseguire il programma in giorni diversi, tuttavia l'elenco è sempre identico, indipendentemente dal giorno in cui eseguo il programma.

Ho anche provato a passare il metodo getDailyTrends() alla data corrente e ho raggiunto gli stessi risultati.

Apprezzerei qualsiasi aiuto con questo, mi sta facendo impazzire. :)

MODIFICA: Il set di risultati che continuo a ricevere è la visualizzazione dei trend di Twitter dal 25.04.2012. E non importa quando eseguo il programma, o quale data gli dò, ottengo gli stessi risultati.

EDIT2: OK, questo mi ha disturbato tutto il giorno, alla fine ho trovato il codice di esempio fornito da twitter4j per la lettura delle tendenze. Ho eseguito il loro codice invece del mio, e sto avendo lo stesso problema. Le tendenze hanno poche settimane e non cambiano mai. Qualcuno è riuscito a far funzionare questo metodo prima?

risposta

1

ho vagamente ricordo ma si può provare il seguente

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

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

     } 
+0

Grazie per la risposta. Ho provato quello che mi hai suggerito e ho ricevuto lo stesso elenco di tendenze che ricevo da giorni :( –

+0

In tal caso, ti suggerisco di verificare quale versione di Twitter4J stai utilizzando e se non si tratta di un bug di versione. vedi un bug per getAsOf che restituisce una data errata http://jira.twitter4j.org/browse/TFJ-613 Se non è elencato, ti suggerisco di segnalare un bug lì –

+0

Stavo usando la versione stabile più recente di twitter4j (2.2.5), ho provato la versione più recente dell'istantanea (2.2.6) e ho avuto di nuovo lo stesso problema. Ora sto esaurendo le idee. –

13
getPlaceTrends(int woeid) 

restituisce i primi 10 argomenti di tendenza per una specifica WOEID, se trend informazione è disponibile per esso.

woeid - Yahoo! Dove On Earth ID della posizione in cui restituire le informazioni di tendenza. Le informazioni globali sono disponibili utilizzando 1 come WOEID.

È possibile ottenere i WOEID s di luoghi diversi con il codice qui sotto

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

E poi, è possibile ottenere le attuali tendenze di una posizione specifica usando il suo WOEID come qui di seguito

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

io uso twitter4j e questa è la mia classe per ottenere argomenti di tendenza da posizione che si ottiene come parametro, in questo esempio "spagna"

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

    } 
}