Skip to content

Commit

Permalink
Changed data to yt id flow.
Browse files Browse the repository at this point in the history
  • Loading branch information
remi1111 committed Mar 30, 2024
1 parent 8441e69 commit 3cfef32
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 15 deletions.
60 changes: 48 additions & 12 deletions src/analyze.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
""" Analyzing results from API calls. """
from datetime import date

import matching
import yt_api

Expand Down Expand Up @@ -55,36 +53,74 @@ def analyze_list(json_list):
# print(count)
return mylist

def get_songlist_artist(data, artist):
def get_clean_songlist_artist(data, artist):
""" Creates a list of songnames for an artist """
songlist = []
for song in data:
if song['song artist'] == artist:
songlist.append(matching.string_clean(song['song name']))
return songlist

def str_date(strng):
""" Transforms a string to date object. """
obj = date(int(strng[0:4]),
int(strng[5:7]),
int(strng[8:10]))
return obj
def get_songlist_artist(data, artist):
""" Creates a list of songnames for an artist """
songlist = []
for song in data:
if song['song artist'] == artist:
songlist.append(song['song name'])
return songlist

def get_dict_artist(data, artist):
""" Creates a list of dicts of songs for an artist """
mydict = {}
for song in data:
if song['song artist'] == artist:
mydict[matching.string_clean(song['song name'])] = song
return mydict

def get_videoid_per_artist(artistchannelid, songlist, artist):
def get_yt_dict_artist(artist_channel_id, verbose=False):
""" Retrieves the list of uploads (songs) from a channel. """
return analyze_list(
yt_api.get_video_list(
yt_api.get_upload_list_call(
artist_channel_id, verbose),
[]))

def get_videoid_per_artist(artist_channel_id, songlist, artist):
""" Creates a dictionary of songs per artist. """
ytdata = analyze_list(yt_api.get_video_list(yt_api.get_upload_list(artistchannelid),[]))
ytdata = get_yt_dict_artist(artist_channel_id)
dupedict = {}
for song in ytdata:
name = matching.string_clean(song['song name'])
if name in songlist:
if yt_api.video_is_valid(song['videoid']):
dat = str_date(song['published on'])
dat = matching.str_date(song['published on'])
if name not in dupedict:
dupedict[name] = [dat, song['videoid'], artist, song['song name']]
elif dat < dupedict[name][0] :
dupedict[name] = [dat, song['videoid'], artist, song['song name']]
return dupedict

def get_videoid_dict_per_artist(artist_channel_id, songlist, spot_dict, artist, verbose=False):
""" Creates a dictionary of songs per artist. """
ytdata = get_yt_dict_artist(artist_channel_id, verbose)
dupedict = {}
for song in ytdata:
name = matching.string_clean(song['song name'])
if name in songlist:
if yt_api.video_is_valid(song['videoid']):
dat = matching.str_date(song['published on'])
if name not in dupedict or dat < matching.str_date(dupedict[name]["dat"]):
dupedict[name] = {'dat': song['published on'],
'video id': song['videoid'],
'album artist': spot_dict[name]['album artist'],
'album name': spot_dict[name]['album name'],
'release date': spot_dict[name]['release date'],
'song artist': artist,
'song name spotify': spot_dict[name]['song name'],
'song name youtube': song['song name']}

return dupedict

def songs_not_found(songlist, id_dict):
""" Creates a list of songnames that were not found for an artist """
not_found_list = []
Expand Down
32 changes: 29 additions & 3 deletions src/get_avs.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
""" Retrieve information from youtube. """
import yt_api
import analyze

def get_dict_channel(channel_id):
""" Get dictionary of info for each song from a channel"""
Expand Down Expand Up @@ -28,7 +29,7 @@ def get_dict_channel(channel_id):
songlist.append(song_dict)
return songlist

def get_dict_spotify(mydict):
def get_dict_spotify(mydict, verbose=False):
""" Get dictionary of info from a
spotify playlist through youtube"""

Expand All @@ -37,5 +38,30 @@ def get_dict_spotify(mydict):
for song in mydict:
set_artists.add(song['song artist'])

# TOTO
return mydict
if verbose:
count_artists = len(set_artists)
print(f"Artists: {count_artists}")

for artist in set_artists:
# artist =
songlist = analyze.get_clean_songlist_artist(mydict, artist)
spotify_dict = analyze.get_dict_artist(mydict, artist)

artistchannel = artist + " - Topic"
channelid = yt_api.search_channel(artistchannel, verbose)
# channelid =

yt_data = analyze.get_videoid_dict_per_artist(channelid, songlist, spotify_dict, artist, verbose)

not_found_list = analyze.songs_not_found(songlist, yt_data)

count = len(songlist)
found = len(songlist) - len(not_found_list)


if verbose:
print(f"Artist: {artist}")
print("count = " + str(count) + ", found = " + str(found))
print("not found:", not_found_list)

return yt_data

0 comments on commit 3cfef32

Please sign in to comment.