Skip to content

Instantly share code, notes, and snippets.

@davidtamaki
Created February 6, 2020 13:32
Show Gist options
  • Select an option

  • Save davidtamaki/e60358cc50bb1f04e9dc0eac2a34aa30 to your computer and use it in GitHub Desktop.

Select an option

Save davidtamaki/e60358cc50bb1f04e9dc0eac2a34aa30 to your computer and use it in GitHub Desktop.
stats on pocketcasts listening
import requests, json, pandas as pd
USERNAME = 'YOUR_EMAIL@WHATEVER.COM'
PW = 'YOUR_PASSWORD'
formdata = {"email": USERNAME, "password": PW, "scope": "webplayer"}
response = requests.post("https://api.pocketcasts.com/user/login", data=formdata)
response.raise_for_status()
token = response.json().get('token')
data = {"v": "1"}
headers = {"authorization": "Bearer {}".format(token)}
# get all podcasts
subscriptions = requests.post("https://api.pocketcasts.com/user/podcast/list", data=data, headers=headers).json()
stats = []
for s in subscriptions['podcasts']:
data = {"uuid": s.get('uuid')}
episodes = requests.post("https://api.pocketcasts.com/user/podcast/episodes", data=data, headers=headers).json()['episodes']
count_total_ep = count_played_ep = sum_total_duration = sum_played_duration = 0
for e in episodes:
if e['duration'] == 0:
continue
sum_total_duration+=e['duration']
sum_played_duration+=e['playedUpTo']
count_total_ep+=1
if e['playedUpTo'] != 0:
count_played_ep+=1
stats.append({
'uuid': s.get('uuid')
, 'title': s.get('title')
, 'sum_played_duration': sum_played_duration
, 'sum_total_duration': sum_total_duration
, 'percent_played_duration': round(sum_played_duration / sum_total_duration if sum_total_duration != 0 else 0,2)
, 'count_played_ep': count_played_ep
, 'count_total_ep': count_total_ep
, 'percent_played_ep': round(count_played_ep / count_total_ep if count_total_ep != 0 else 0,2)
})
pd.set_option('display.max_rows', None)
df = pd.DataFrame(stats)
df.sort_values(by='percent_played_ep', ascending=False).to_csv(r'stats.csv', index=False)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment