2011-09-26 1 views
0

Je suis en train d'implémenter Klout API avec une application Web que je travaille. Klout vous permet de faire 10 demandes/seconde, et 10.000/day.Mise à l'échelle des requêtes d'API limitées dans le temps pour de grands ensembles de requêtes

Chaque compte utilisateur peut afficher N autres comptes utilisateur avec leurs scores Klout.

Le meilleur moyen de collecter ces informations serait-il de demander périodiquement des scores à l'API Klout en tant que processus d'arrière-plan et de stocker ces résultats dans la base de données? Si je fais cela, disons que nous avons 10 utilisateurs qui ont 30 scores Klout d'autres utilisateurs qu'ils veulent voir. Dans un processus d'arrière-plan quotidien, disons aussi que nous passons en revue chacun des 10 utilisateurs et que nous recherchons chacun des 30 résultats de Klout que nous avons suivis. Cela permettrait de faire un ping sur l'API de Klout à un maximum de 300 fois tout au long de ce processus (mais vous pouvez inclure jusqu'à 5 utilisateurs pour rechercher leurs scores par requête - le nombre de requêtes pourrait donc être réduit à 60). Afin d'éviter le plafond de 10 demandes par seconde, devrais-je dormir pendant environ 10 secondes entre chaque demande? Serait-ce le meilleur moyen d'éviter les erreurs de l'API?


Psuedo Exemple:

$maxUserPerRequest = 5; 
foreach ($users as $user){ 
    $follows = getKloutFollows($user); // list of klout scores to look up per user 
    $minimize = 0; // allow to minimize total requests by 5 users per req. 
    $batch = array() // array of 5 users to request 
    foreach($follows as $follow){ 
     $batch[] = $follow; 
     // query 5 users at a time 
     if ($maxUserPerRequest % $minimize==0){ 
      $kloutAPI->getScore($batch); // storing results 
      $batch = array(); 
      sleep(10); // avoid overloading API requests 
     } 
     $minimize++; 
    } 
} 

Répondre

1

Cela devrait être suffisant pour éviter d'avoir des erreurs, mais faire la base de données de masse et le stockage des concatène données pendant plus de 5 jours serait contraire encore le Terms of Service.

Je voudrais juste garder un compteur de chaque demande. Faire 10 demandes. Dormez pour 1000. Réinitialisez le compteur. Faire 10 demandes. Dormir pour 1000.

+1

En fait 7 jours non? "Vous ne pouvez conserver des copies de Klout Data que pendant sept jours sur votre serveur, votre cache ou votre base de données." ' – mellamokb

+0

Alors, ne serais-je pas bien si je faisais ce processus dans les 7 jours? – Atticus

+0

@mellamokb vous avez raison. J'ai tendance à penser en termes de jours ouvrables. – harmophone

Questions connexes