![]() |
#61 | |
Connoisseur
![]() Posts: 72
Karma: 40
Join Date: Mar 2020
Location: Belgium (sorry, I am from the Walloon side of the country and I speak french only)
Device: PW3, Kobo Libra H2O
|
Quote:
Merci pour ton retour... Le plus longtemps que j'ai été banni, c'est de l'ordre de 2 semaines (je n'ai pas essayé tous les jours ![]() En fait, je ne comprends pas comment ils mesurent les accès. Il me semble que leur algorithme prend en compte tant le nombre d'accès que le temps entre chaque accès. Je présume que l'intention est de limiter l'accès au seuls "humains" pour rejeter les "accès type robot"... En tous les cas, le but semble être d'eviter une saturation du serveur Babelio, et c'est tout à fait normal... Je n'ai pas vu que leur site proposait une limitation par un fichier "robot" et donc j'ai imaginé de laisser, au moins, un temps de plus d'une seconde entre chaque accès (1.2 sec. en fait). J'ai établi cela avec ce décorateur que je place sur la routine de lecture de la page: Code:
class Un_par_un(object): ''' This is a class decorator, cause I am too lazy rewrite that plugin... :), beside I want to learn creating one. Well, granted, dedicated to ret_soup() Purpose: execute the decorated function with a minimum of x seconds between each execution, and collect all access time information... rate_limit() from calibre.ebooks.metadata.sources.search_engines provides the delay using a locked file containing the access time... maintenance of this resource is hidden in a context manager implementation. @contextmanager def rate_limit(name='test', time_between_visits=2, max_wait_seconds=5 * 60, sleep_time=0.2): I assume that calibre will wait long enough for babelio plugin (I pushed to 45 sec after first match) ''' def __init__(self,fnctn): self.function = fnctn self._memory = [] def __call__(self, *args, **kwargs): # who is calling who = "[__init__]" for key,value in kwargs.items(): if "who" in key: who = value with rate_limit(name='Babelio_db', time_between_visits=TIME_INTERVAL): # call decorated function: "ret_soup" whose result is (soup,url) result = self.function(*args, **kwargs) self._memory.append((result[1], time.asctime(), who)) return result def get_memory(self): mmry = self._memory self._memory = [] return mmry Avec ce setup, je ne fais pas jeter si j'accède le site avec une série de requête de quelque 10 titres à la fois... Je ne fais jamais aucune requête de de centaine de titres qu'en cours de test, et j'évite de répéter un test... Je veux respecter Babelio et ses règles (trop implicites malheureusement). Je suppose que si tu exposes le nombre d'accès pour les 10 titres et le temps entre chaque accès, tu pourrais voir que un op de Babelio aurait des raisons de te suspendre... (c'est la raison de get_memory dans mon décorateur.) Le pluggin réagis sur une réponse http de valeur "500". Je pourrais voir si j'ai un retour = "429", mais je n'en ai jamais eu aucune trace dans mes logs... As-tu un log qui montre cette réponse http de valeur 429? je serais intéressé par un log qui le met en evidence... Last edited by lrpirlet; 05-26-2023 at 05:27 AM. Reason: parti trop tôt |
|
![]() |
![]() |
![]() |
#62 |
Connoisseur
![]() Posts: 72
Karma: 40
Join Date: Mar 2020
Location: Belgium (sorry, I am from the Walloon side of the country and I speak french only)
Device: PW3, Kobo Libra H2O
|
Babelio_db rapporte (en option) les vote et les notes
Je viens de modifier babelio_db afin qu'il rapporte le nombre de votes et la moyenne de ces votes.
J'ai titré cette section "Popularité". Elle dit (par exemple) : "Le nombre de cotations est 37 , avec une note moyenne de 3.64 sur 5". Je présume que le maximum est toujours ![]() Bien entendu, cette section peut ne pas être vue si on ne la veut pas, car ça peut évoluer. Pensez à la valider ou l'invalider dans sa configuration. Ceci en vue de participer à la modification de Babelio Notes, qui probablement se servira de l'identifiant de babelio_db (babelio_id). Avant que l'on me pose la question, NON il n'est pas possible de modifier une colonne personnalisée (qui commence par #) à partir d'un "metadata source plugin"... Et croyez-moi, j'ai essayé, mais je pense qu'il faudrait modifier calibre en profondeur... sans le casser... et avec l'accord des auteurs de calibre. En bref, je n'ai ni le temps, ni même la motivation: c'est trop pour moi. Seul l'approche prise par babelio notes est envisageable. |
![]() |
![]() |
![]() |
Thread Tools | Search this Thread |
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
Must Have Tools Extensions? | elbarto0 | Kindle Developer's Corner | 3 | 10-03-2016 04:57 PM |
extensions.cfg who can explain it | Skeeve | PocketBook | 2 | 02-20-2015 12:57 AM |
links and extensions | Iain | ePub | 3 | 10-13-2010 12:46 AM |
Same book name, different extensions | Ununoctien | Bookeen | 3 | 12-13-2007 07:19 AM |
Firefox Extensions Best Of | TadW | Lounge | 9 | 12-17-2004 01:58 PM |