Skip to content

Commit a0ab40b

Browse files
authored
Merge pull request #95 from metabrainz/feedback-rate-limiting
Data fetching rate limiting
2 parents af40505 + ed28476 commit a0ab40b

File tree

3 files changed

+29
-7
lines changed

3 files changed

+29
-7
lines changed

troi/listenbrainz/feedback.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from collections import defaultdict
22
from datetime import datetime, timedelta
33
from typing import Optional
4+
from time import sleep
45

56
import requests
67

@@ -40,10 +41,17 @@ def read(self, inputs):
4041
for idx in range(0, len(mbids), batch_size):
4142
recording_mbids = mbids[idx: idx + batch_size]
4243

43-
response = requests.get(
44-
f"https://api.listenbrainz.org/1/feedback/user/{self.user_name}/get-feedback-for-recordings",
45-
params={"recording_mbids": ",".join(recording_mbids)}
46-
)
44+
while True:
45+
response = requests.get(
46+
f"https://api.listenbrainz.org/1/feedback/user/{self.user_name}/get-feedback-for-recordings",
47+
params={"recording_mbids": ",".join(recording_mbids)}
48+
)
49+
if response.status_code == 429:
50+
sleep(2)
51+
continue
52+
53+
break
54+
4755
response.raise_for_status()
4856
data = response.json()["feedback"]
4957
if len(data) == 0:

troi/listenbrainz/listens.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from collections import defaultdict
22
from datetime import datetime, timedelta
33
from typing import Optional
4+
from time import sleep
45

56
import requests
67

@@ -45,6 +46,10 @@ def _fetch_recent_listens_index(self):
4546
f"https://api.listenbrainz.org/1/user/{self.user_name}/listens",
4647
params={"min_ts": min_ts, "count": 100}
4748
)
49+
if response.status_code == 429:
50+
sleep(2)
51+
continue
52+
4853
response.raise_for_status()
4954
data = response.json()["payload"]
5055
if len(data["listens"]) == 0:

troi/musicbrainz/recording_lookup.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from time import sleep
2+
13
import requests
24
import ujson
35

@@ -40,9 +42,16 @@ def read(self, inputs):
4042

4143
self.debug("- debug %d recordings" % len(recordings))
4244

43-
r = requests.post(self.SERVER_URL % len(recordings), json=data)
44-
if r.status_code != 200:
45-
raise PipelineError("Cannot fetch recordings from ListenBrainz: HTTP code %d" % r.status_code)
45+
while True:
46+
r = requests.post(self.SERVER_URL % len(recordings), json=data)
47+
if r.status_code == 429:
48+
sleep(2)
49+
continue
50+
51+
if r.status_code != 200:
52+
raise PipelineError("Cannot fetch recordings from ListenBrainz: HTTP code %d" % r.status_code)
53+
54+
break
4655

4756
try:
4857
rows = ujson.loads(r.text)

0 commit comments

Comments
 (0)