Acceso a tweets desde Twitter API -- java campo con twitter camp codereview Relacionados El problema

Accessing tweets from Twitter API


3
vote

problema

Español

Necesito ayuda para hacer que este código sea más eficiente, pero aún así funciona igual, como hacerlo acceder a la API de Twitter menos veces. Cuando ejecuto este código durante como 1 min, recibo un error de Twitter que dice que supera los límites.

  List<Status> tweets = result.getTweets();         for (Status tweet : tweets) {              if(!(tweet.getUser().getScreenName().toString().equals("gh") || tweet.getUser().getScreenName().toString().equals("gh"))){                  boolean found = false;                  List<Status> Stats=  tw.getHomeTimeline();                 for (Status StatList : Stats) {                        if(StatList.getTweetText().equals(tweet.getTweetText())){                            found = true;                         break;                         try {                             System.out.println(tweet.getUser().getScreenName() );                              Thread.sleep(2000);                         } catch(InterruptedException ex) {                             Thread.currentThread().interrupt();                         }                     }else{                         // nothing here                                         }                 }                 if (found) // you can move this and the initialisation(boolean found = false) out side the upper if statement                     System.out.println("false");                 else                     System.out.println("turn");              }else{                 System.out.println("blocked");             }         }   
Original en ingles

I need help making this code more efficient but still functions the same, such as by making it access the Twitter API fewer times. When I run this code for like 1 min, I get an error from Twitter saying that it exceeds limits.

List<Status> tweets = result.getTweets();         for (Status tweet : tweets) {              if(!(tweet.getUser().getScreenName().toString().equals("gh") || tweet.getUser().getScreenName().toString().equals("gh"))){                  boolean found = false;                  List<Status> Stats=  tw.getHomeTimeline();                 for (Status StatList : Stats) {                        if(StatList.getTweetText().equals(tweet.getTweetText())){                            found = true;                         break;                         try {                             System.out.println(tweet.getUser().getScreenName() );                              Thread.sleep(2000);                         } catch(InterruptedException ex) {                             Thread.currentThread().interrupt();                         }                     }else{                         // nothing here                                         }                 }                 if (found) // you can move this and the initialisation(boolean found = false) out side the upper if statement                     System.out.println("false");                 else                     System.out.println("turn");              }else{                 System.out.println("blocked");             }         } 
     
 
 

Lista de respuestas

2
 
vote
  • Se debe eliminar el código muerto
  • almacenar múltiples propiedades de acceso a variables como @thepace mencionado
  • Uso braces para Single IF STARNEMENTS también. Esta es una cuestión de gusto, pero su código será menos error de error
  • comentarios que no explican por qué se hace algo debe ser eliminado. lo que se hace debe explicarse por el código en sí mismo.
  • Esta doble comprobación si el nombre de pantalla es "GH" no es necesario. No puedes estar más seguro que seguro.
  • Llamar toString() en una cadena no es necesario
  • vacío else bloques se pueden eliminar
  • Los nombres de las variables
  • deben estar usando camelCase carcasa

refactorización

después de aplicar lo anterior

  List<Status> tweets = result.getTweets();  for (Status tweet : tweets) {      String userName = tweet.getUser().getScreenName();     if(!(userName.equals("gh")){          boolean found = false;          List<Status> stats=  tw.getHomeTimeline();         for (Status status : stats) {               String tweetText = tweet.getTweetText();             if(status.getTweetText().equals(tweetText)){                    found = true;                 break;              }          }          if (found) {              System.out.println("false");          } else {              System.out.println("turn");          }      } else {          System.out.println("blocked");      }  }   
 
  • dead code should be removed
  • store multiple accessed properties to variables like @thepace mentioned
  • use braces for single if statements also. This is a matter of taste, but your code will be less errorprone
  • comments which doesn't explain why something is done should be removed. What is done should be explained by the code itself.
  • this double checking if the screenname is "gh" isn't needed. You can't be more sure than sure.
  • Calling toString() on a String is not necessary
  • empty else blocks can be removed
  • variable names should be using camelCase casing

Refactoring

after applying the above

List<Status> tweets = result.getTweets();  for (Status tweet : tweets) {      String userName = tweet.getUser().getScreenName();     if(!(userName.equals("gh")){          boolean found = false;          List<Status> stats=  tw.getHomeTimeline();         for (Status status : stats) {               String tweetText = tweet.getTweetText();             if(status.getTweetText().equals(tweetText)){                    found = true;                 break;              }          }          if (found) {              System.out.println("false");          } else {              System.out.println("turn");          }      } else {          System.out.println("blocked");      }  } 
 
 
2
 
vote

Solo unas pocas sugerencias que podrían mejor el código:

  1. Si tiende a acceder a una estructura para un elemento determinado varias veces con una operación en ella, extraiga en una variable local:

      tweet.getUser().getScreenName() // If its String, toString not required.   
  2. HAY PRUEBA ... CAMBIO PARA LAS DIRECCIONES QUE PUEDEN CAUSAR LA EXCEPCIÓN I.E PUT OUT OUT

      System.out.println(tweet.getUser().getScreenName() );   
  3. Como afirma su comentario, coloque el 9988776655544337 con los dos estados y tenga declaraciones de impresión mínimas. Si es para depurar, agregue comentarios o depuración de la bandera.

  4. ¡TENER PRUEBA ... CAMBIO DESPUÉS DE LA ROTAZA? Por favor, compruebe.
  5. Comprobar si tweets es null después de

      toString()0  
  6. Verificar si toString()1 es toString()2 dentro del bucle.

  7. aplica (5) y (6) para estadísticas también.
 

Just a few hints that might better the code:

  1. If you tend to access a structure for a given element multiple times with an operation on it, extract it in a local variable:

    tweet.getUser().getScreenName() // If its String, toString not required. 
  2. Have try..catch for statements that can cause the exception i.e put this out

    System.out.println(tweet.getUser().getScreenName() ); 
  3. As your comment states, put the boolean out with the two states and have minimal print statements. If its for debugging, add comments or debug flag.

  4. Having try..catch after break? Please check.
  5. Check if tweets is null after

    List<Status> tweets = result.getTweets(); 
  6. Check if tweet is null inside the for loop.

  7. Apply (5) and (6) for Stats as well.
 
 

Relacionados problema

1  Modelos para analizar datos de Twitter (* que se basan en el paquete Tweepy)  ( Models for analysing twitter data which based on tweepy package ) 
Tengo tres módulos aquí models.py , 9988776655544337 y adjustment.py8 . Estos tres pueden usarse para realizar el análisis de los datos de Twitter a travé...

2  Pequeño bot de Twitter hecho en Python  ( Small twitter bot made in python ) 
Acabo de empezar a jugar con Python y he decidido crear un pequeño script que publique Tweets cada hora (Cronjob en Ubuntu) diciendo qué hora es. ¿No estoy ...

2  Obteniendo la lista de personas que rt'd una cuenta particular de Twitter (usando Twitter4j)  ( Getting the list of people who rtd a particular twitter account using twitter4 ) 
Estoy buscando comentarios (tanto Java General y Twitter específicos) sobre cómo estoy obteniendo las manijas de Twitter de todos los que me retuiron en los ú...

2  Pisturero de Twitter de Python  ( Python twitter parser ) 
En los intereses de mejorar mis habilidades de codificación de Python, quería publicar un programa que recientemente construí y lo hubiera criticado por ti, f...

12  Tweets de transmisión en vivo y trazando su valor sentimental en colores en un mapa del mundo  ( Live streaming tweets and plot its sentimental value in colors on a world map ) 
Quiero tener a alguien revisar y ayudarme a obtener buenas ideas sobre cómo mejorar mi proyecto actual. Toda la información sobre el proyecto está en el sig...

3  Entrando y autorizando las credenciales de Twitter  ( Entering and authorizing twitter credentials ) 
Soy bastante nuevo para RUBY, y he estado refactorando este código (es una aplicación tonta, pero me está ayudando a aprender), ya que aprendo más y más práct...

7  Cliente API de transmisión de Twitter: Identificación de los Hashtags de tendencias superiores para un término específico  ( Twitter streaming api client identifying the top trending hashtags for a specif ) 
He estado experimentando con la API de transmisión de Twitter y me gustaría algún comentario crítico en mi último proyecto. Específicamente el código de corre...

16  Sitio web de Twitter Client Portfolio  ( Twitter client portfolio website ) 
Estoy creando algún tipo de sitio web "portafolio" para mi auto (una tonelada de contenido de marcador de posición en este momento ...) y me preguntaba si pod...

14  Buscar tweets  ( Fetching tweets ) 
He escrito este código (truncado) para buscar algunos tweets: dispatch_async(dispatch_get_global_queue(0, 0), ^{ [[UIApplication sharedApplication] s...

4  Lea usuarios de Twitter de un archivo de texto  ( Read twitter users from a text file ) 
Tengo este código para leer usuarios de Twitter de un archivo de texto representado por enteros en el formato "int (espacio) INT", donde el primer 9988777655...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos