Skip to content

Commit

Permalink
more pylint issues solved
Browse files Browse the repository at this point in the history
  • Loading branch information
remi1111 committed Mar 29, 2024
1 parent d485aea commit 950e475
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 32 deletions.
28 changes: 21 additions & 7 deletions src/matching.py
Original file line number Diff line number Diff line change
@@ -1,31 +1,45 @@
""" Matching of titles artists and videos. """

import yt_api
from datetime import *
from datetime import date
import string
import yt_api
import analyze

def string_clean(strs):
""" Cleans a string to have only a-z and 0-9. """
return strs \
.split("(")[0] \
.strip() \
.lower() \
.replace(" ","") \
.translate(str.maketrans('', '', string.punctuation))

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'].split("(")[0].strip().lower().replace(" ","").translate(str.maketrans('', '', string.punctuation)))
songlist.append(string_clean(song['song name']))
return songlist

def get_videoid_per_artist(artistchannelid, songlist, artist):
ytdata = yt_api.analyze_list(yt_api.get_video_list(yt_api.get_upload_list(artistchannelid)))
""" Creates a dictionary of songs per artist. """
ytdata = analyze.analyze_list(yt_api.get_video_list(yt_api.get_upload_list(artistchannelid)))
dupedict = {}
for song in ytdata:
name = song['song name'].split("(")[0].strip().lower().replace(" ","").translate(str.maketrans('', '', string.punctuation))
name = string_clean(song['song name'])
if name in songlist:
if yt_api.video_is_valid(song['videoid']):
dat = date(int(song['published on'][0:4]), int(song['published on'][5:7]), int(song['published on'][8:10]))
dat = date(int(song['published on'][0:4]),
int(song['published on'][5:7]),
int(song['published on'][8:10]))
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 songs_not_found(songlist, id_dict):
""" Creates a list of songnames that were not found for an artist """
not_found_list = []
for song in songlist:
if song not in id_dict.keys():
Expand Down
61 changes: 38 additions & 23 deletions src/spotify_api.py
Original file line number Diff line number Diff line change
@@ -1,43 +1,53 @@
""" Spotify API requests. """
import requests
import base64
import json
from secrets import *
# from secrets import *
import os
import sys

import requests

# Retrieve Spotify session token.
def get_token():
""" Retrieve spotify api token """
# Retrieve ID and secret from .env
clientId = os.getenv("SPOTIFY_CLIENT_ID")
clientSecret = os.getenv("SPOTIFY_CLIENT_SECRET")
client_id = os.getenv("SPOTIFY_CLIENT_ID")
client_secret = os.getenv("SPOTIFY_CLIENT_SECRET")

# Authorization
url = "https://accounts.spotify.com/api/token"
headers = {}
data = {}

# Encode as Base64
message = f"{clientId}:{clientSecret}"
messageBytes = message.encode('ascii')
base64Bytes = base64.b64encode(messageBytes)
base64Message = base64Bytes.decode('ascii')
message = f"{client_id}:{client_secret}"
message_bytes = message.encode('ascii')
base64_bytes = base64.b64encode(message_bytes)
base64_message = base64_bytes.decode('ascii')

headers['Authorization'] = f"Basic {base64Message}"
headers['Authorization'] = f"Basic {base64_message}"
data['grant_type'] = "client_credentials"

r = requests.post(url, headers=headers, data=data)
r = requests.post(url, headers=headers, data=data, timeout=10)
if r is None:
print("Spotify request timed out", file=sys.stderr)
sys.exit(101)

token = r.json()['access_token']
return token


def get_playlist(playlist_id, token, mylist=[], playlistUrl=None):
if not playlistUrl:
playlistUrl = f"https://api.spotify.com/v1/playlists/{playlist_id}/tracks"
def get_playlist(playlist_id, token, mylist, playlist_url=None):
""" Retrieve playlist form spotify """
if not playlist_url:
playlist_url = f"https://api.spotify.com/v1/playlists/{playlist_id}/tracks"
headers = {
"Authorization": "Bearer " + token
}
res = requests.get(url=playlistUrl, headers=headers)
res = requests.get(url=playlist_url, headers=headers, timeout=10)
if res is None:
print("Spotify request timed out", file=sys.stderr)
sys.exit(101)

json_data = json.loads(res.content)

a_list = analyze_playlist(json_data)
Expand All @@ -50,18 +60,23 @@ def get_playlist(playlist_id, token, mylist=[], playlistUrl=None):
return get_playlist(playlist_id, token, newlist, next_url)

def analyze_playlist(json_data):
""" Stores data for each song in a dictionary. """
mylist = []
for song in json_data['items']:
# album_artist = song['track']['album']['artists'][0]['name']
# album_name = song['track']['album']['name']
# release_date = song['track']['album']['release_date']
album_artist = song['track']['album']['artists'][0]['name']
album_name = song['track']['album']['name']
release_date = song['track']['album']['release_date']
song_artist = song['track']['artists'][0]['name']
song_name = song['track']['name']
song_dict = {'song artist': song_artist, 'song name': song_name}
# song_dict = {'album artist': album_artist, 'album name': album_name, 'release date': release_date, 'song artist': song_artist, 'song name': song_name}
song_dict = {'album artist': album_artist,
'album name': album_name,
'release date': release_date,
'song artist': song_artist,
'song name': song_name}
mylist.append(song_dict)
return mylist

def write_to_file(dict, filename):
with open(filename, 'w') as file:
file.write(json.dumps(dict))
def write_to_file(song_dict, filename):
""" Write a playlist dictionary to a file. """
with open(filename, 'w', encoding="utf-8") as file:
file.write(json.dumps(song_dict))
5 changes: 3 additions & 2 deletions src/yt_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,9 @@ def api_call(page):
returns: data from API call """
data = requests.get(page)
if data.status_code != 200:
print(data.content)
sys.exit(0)
print("Youtube request not successfull", file=sys.stderr)
print(data.content, file=sys.stderr)
sys.exit(501)
else:
return data

Expand Down

0 comments on commit 950e475

Please sign in to comment.