Bonjour,
Depuis longtemps certaine personne (@olive entre autres) rencontraient l’erreur « Too many requests. Try again in some time. » sans vraiment comprendre pourquoi, car du coté de l’équipe de Dev/Testeur, personne n’avais l’erreur et nous n’arrivions pas a reproduire.
Depuis plusieurs jours, cela a changé, plusieurs personnes de l’équipe on rencontré le problème (et d’autre sur le net).
Apres de longues investigations, j’ai trouvé une solution qui a fonctionné pour moi et pour d’autres.
Avant de donner la solution je vais expliqué pourquoi cela arrive.
Il existe des limitation en nombre de requête/minutes, un nombre de requêtes mensuel et plein d’autre encore…
Pour vulgariser AlexaAPI est une émulation de l’application Alexa du téléphone, et donc ces limitation sont communes, ce qui explique que quand on a le Too many requests sur le plugin, l’application est aussi en rideau.
Visiblement il existe une autre limitation (dont je ne connais pas les marges), c’est une limitation de « l’agent », un agent un présent dans les requête web, c’est pour identifier sur quel navigateur vous vous trouver et ajuster l’affichage lors de votre surf sur votre navigateur. Ici nous n’utilisons pas de navigateur, mais c’est un paramètre obligatoire, il faut donc en choisir un !
Pour ce faire, il faut modifier un fichier du plugin AlexaAPI : /plugins/alexaapi/resources/lib/alexa-remote.js
Dans les environ des lignes 90 (mon code étant modifié il peut y avoir des variations) vous devriez trouver ceci :
init(cookie, callback) {
if (typeof cookie === 'object') {
this._options = cookie;
if (!this._options.userAgent) {
const platform = os.platform();
if (platform === 'win32') {
this._options.userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0';
}
/*else if (platform === 'darwin') {
this._options.userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36';
}*/
else {
this._options.userAgent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36';
}
}
Modifiez le par :
init(cookie, callback) {
if (typeof cookie === 'object') {
this._options = cookie;
if (!this._options.userAgent) {
const platform = os.platform();
if (platform === 'win32') {
this._options.userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Safari/605.1.15';
}
/*else if (platform === 'darwin') {
this._options.userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36';
}*/
else {
this._options.userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Safari/605.1.15';
}
}
Cela fonctionne chez moi. Je pense (et cela n’engage que mon avis perso), qu’il est préférable d’utiliser un agent diffèrent de l’agent utilisé pas l’application de son téléphone.
Utilisant Android sur mon mobile, j’utilise donc un agent iOS sur mon plugin. A mon avis il faudra faire exactement l’inverse pour ceux utilisant un iOS, et pour ceux qui ont un de chaque débrouillez vous testez en des différents
Dans une version futur, il y aura une optimisation des requêtes, peut être que option sera ajouter pour changer facilement l’agent sans bidouiller le code, mais en attendant, voici une page qui tous les agents : Liste des User Agent par système d'exploitation et navigateur
Si vous rencontrez également le soucis et que cela résous votre problème, n’hésitez pas a le dire !