diff --git a/artwork_viewer.py b/artwork_viewer.py new file mode 100644 index 0000000..cb545fc --- /dev/null +++ b/artwork_viewer.py @@ -0,0 +1,131 @@ +import datetime +import io +import os.path +import pprint +import time +import tkinter +from tkinter import * +from tkinter import ttk + +import PIL.ImageTk +import PIL.Image +import requests + +from search_on_itunes import search_on_itunes_v2 +import pandas + +df = pandas.read_excel(os.path.join(os.getcwd(), 'merged.xlsx'), sheet_name='Sheet1', index_col=0) +print('rows:', df.__len__()) +print(df.iloc[1]) + + +def get_itunes_info(row): + url, artist_name, release_name, release_type, release_date, record_label, song_name, length, lyrics, composition, arrangement = row.tolist() + print('\n\n\n') + print(artist_name) + print(release_name) + print(song_name) + print(int(str(length).split(':')[0]) * 60 + int(str(length).split(':')[1])) + print(datetime.datetime.strptime(release_date, '%Y/%m/%d').date()) + response = search_on_itunes_v2(artist_name=artist_name, album_name=release_name, song_name=song_name, + released_date=datetime.datetime.strptime(release_date, '%Y/%m/%d').date(), + length=int(str(length).split(':')[0]) * 60 + int(str(length).split(':')[1]), + debug=False) + + if response == [None, None, 0]: + print("Not found!") + return [{'collectionName': 'None'}, + [None, 'None', None, 'http://cdn.helloproject.com/img/release/o/nowprinting.jpg', None, 'None'], + row.tolist()] + + return response + + +i = 6000 + + +def increment(): + global i + print(i, end='->') + i += 1 + print(i) + if i >= df.__len__(): + i = df.__len__() - 1 + global info + info = get_itunes_info(df.iloc[i]) + artist_label['text'] = info[1][1] + album_label['text'] = info[0]['collectionName'] + song_label['text'] = info[1][5] + + global canvas + global img + img = PIL.ImageTk.PhotoImage( + PIL.Image.open(io.BytesIO(requests.get(info[1][3].replace('5000x5000', '1000x1000')).content))) + canvas.itemconfig(tagOrId='image', image=img) + + print(info) + + +def decrement(): + global i + print(i, end='->') + i -= 1 + print(i) + if i < 0: + i = 0 + global info + info = get_itunes_info(df.iloc[i]) + + artist_label['text'] = info[1][1] + album_label['text'] = info[0]['collectionName'] + song_label['text'] = info[1][5] + + global canvas + global img + img = PIL.ImageTk.PhotoImage( + PIL.Image.open(io.BytesIO(requests.get(info[1][3].replace('5000x5000', '1000x1000')).content))) + canvas.itemconfig(tagOrId='image', image=img) + + print(info) + + +root = Tk() +root.geometry('2000x1100+100+100') +root.title('H!P Release & iTunes Connector') + +info = get_itunes_info(df.iloc[4000]) +artist_label = tkinter.Label(root, text=info[1][1], font=("", 20)) +artist_label.place(x=20, y=20) + +album_label = tkinter.Label(root, text=info[0]['collectionName'], font=("", 20)) +album_label.place(x=20, y=60) + +song_label = tkinter.Label(root, text=info[1][5], font=("", 20)) +song_label.place(x=20, y=100) + +artwork = PIL.ImageTk.PhotoImage( + PIL.Image.open(io.BytesIO(requests.get(info[1][3].replace('5000x5000', '500x500')).content))) +canvas = tkinter.Canvas(root, width=1000, height=1000) +canvas.place(x=700, y=0) +canvas.create_image( + 0, + 0, + image=artwork, + anchor=tkinter.NW, + tag='image' +) + +decBtn = tkinter.Button(text='前へ', command=lambda: decrement()) +decBtn.place(x=20, y=140) +incBtn = tkinter.Button(text='次へ', command=lambda: increment()) +incBtn.place(x=20, y=180) + + +def slideshow(): + increment() + global root + root.after(300, slideshow) + + +root.after(300, slideshow) +root.mainloop() diff --git a/load_and_search.py b/load_and_search.py index e894a14..9a50261 100644 --- a/load_and_search.py +++ b/load_and_search.py @@ -1,7 +1,15 @@ import datetime +import io import os.path import pprint import time +import tkinter +from tkinter import * +from tkinter import ttk + +import PIL.ImageTk +import PIL.Image +import requests from search_on_itunes import search_on_itunes_v2 import pandas @@ -12,24 +20,78 @@ pandas.options.display.max_colwidth = 6000 pandas.options.display.colheader_justify = 'left' +# root = Tk() +# root.geometry('1600x600') +# root.title('H!P Release & iTunes Connector') +# artist_label = tkinter.Label(root, text="artist", font=("", 20)) +# artist_label.place(x=20, y=20) +# album_label = tkinter.Label(root, text="album", font=("", 20)) +# album_label.place(x=20, y=60) +# song_label = tkinter.Label(root, text="song", font=("", 20)) +# song_label.place(x=20, y=100) +# +# artwork = PIL.ImageTk.PhotoImage( +# PIL.Image.open(io.BytesIO(requests.get('http://cdn.helloproject.com/img/release/o/nowprinting.jpg').content))) +# canvas = tkinter.Canvas(root, width=500, height=500) +# canvas.place(x=1000, y=0) +# canvas.create_image( +# 0, +# 0, +# image=artwork, +# anchor=tkinter.NW +# ) + df = pandas.read_excel(os.path.join(os.getcwd(), 'merged.xlsx'), sheet_name='Sheet1', index_col=0) for _, col in df.iterrows(): - url, artist_name, release_name, release_type, release_date, record_label, song_name, length, lyrics, composition, arrangement = col + url, artist_name, release_name, release_type, release_date, record_label, song_name, length, lyrics, composition, arrangement = col.tolist() + print('\n\n\n') print(artist_name) print(release_name) print(song_name) print(int(str(length).split(':')[0]) * 60 + int(str(length).split(':')[1])) print(datetime.datetime.strptime(release_date, '%Y/%m/%d').date()) - print('\n\n\n') response = search_on_itunes_v2(artist_name=artist_name, album_name=release_name, song_name=song_name, released_date=datetime.datetime.strptime(release_date, '%Y/%m/%d').date(), length=int(str(length).split(':')[0]) * 60 + int(str(length).split(':')[1]), debug=False) - pprint.pprint(response) - # time.sleep(1) - # time.sleep(0.3) + if response == [None, None, 0]: + print("Not found!") + continue + + pprint.pprint(response[1]) + + root = Tk() + root.geometry('1600x600+100+100') + root.title('H!P Release & iTunes Connector') + + artist_label = tkinter.Label(root, text=response[1][1], font=("", 20)) + artist_label.place(x=20, y=20) + + album_label = tkinter.Label(root, text=response[0]['collectionName'], font=("", 20)) + album_label.place(x=20, y=60) + + song_label = tkinter.Label(root, text=response[1][5], font=("", 20)) + song_label.place(x=20, y=100) + + artwork = PIL.ImageTk.PhotoImage( + PIL.Image.open(io.BytesIO(requests.get(response[1][3].replace('5000x5000', '500x500')).content))) + canvas = tkinter.Canvas(root, width=500, height=500) + canvas.place(x=1000, y=0) + canvas.create_image( + 0, + 0, + image=artwork, + anchor=tkinter.NW + ) + + root.mainloop() + # time.sleep(5) + # time.sleep(10) + # input() + + time.sleep(1) # search_result = search_on_itunes(search_keyword=song_name, artist_keyword=artist_name, debug=True) # # pprint.pprint(search_result) diff --git a/search_on_itunes.py b/search_on_itunes.py index 75f68a1..c986261 100644 --- a/search_on_itunes.py +++ b/search_on_itunes.py @@ -51,6 +51,7 @@ def search_on_itunes_v2(song_name='', album_name='', artist_name='', length=0, r if artist_name != '': print('アーティスト名: ' + artist_name) if song_name == '' and album_name == '': + sys.stdout = sys.__stdout__ return KeyError if debug is False: sys.stdout = open(os.devnull, 'w', encoding='UTF-8') @@ -63,63 +64,70 @@ def search_on_itunes_v2(song_name='', album_name='', artist_name='', length=0, r if song_name[0].isascii() or song_name[0].isdigit(): song_name = ' ' + song_name song_name = mojimoji.zen_to_han(song_name, ascii=False, kana=False) - - result_json = json.loads(safe_request_get_as_text( + raw_result = safe_request_get_as_text( "https://itunes.apple.com/search?term=" + song_name + - "&media=music&entity=song&attribute=songTerm&country=jp&lang=ja_jp&limit=10&GenreTerm=J-Pop&sort=recent")) + "&media=music&entity=song&attribute=songTerm&country=jp&lang=ja_jp&limit=50&GenreTerm=J-Pop&sort=recent") + result_json = json.loads(raw_result) # pprint.pprint(json.loads(result_json)) sort_list = [] if not result_json['results']: - return [] + sys.stdout = sys.__stdout__ + return [None, None, 0] for content in result_json['results']: - pprint.pprint(content) + # pprint.pprint(content) + if 'releaseDate' not in content: + return [None, None, 0] + customized_data = [] print('収録アルバム: ' + content['collectionName']) itunes_released_date = datetime.datetime.fromisoformat( str(content['releaseDate']).replace('Z', '+00:00')).date() print(itunes_released_date) + customized_data.append(itunes_released_date) print('アーティスト名: ' + content['artistName']) print(content['artistViewUrl']) print(str(content['artworkUrl100']).replace('100x100', '5000x5000')) print(content['collectionViewUrl']) + customized_data.extend([content['artistName'], content['artistViewUrl'], + str(content['artworkUrl100']).replace('100x100', '5000x5000'), + content['collectionViewUrl'], content['trackName'], content['trackTimeMillis'] / 1000]) print('曲名: ' + content['trackName']) print('長さ: ' + str(int(content['trackTimeMillis'] / 1000)) + '秒') + collection_name_diff = difflib.SequenceMatcher(None, str(content['collectionName']) .replace('- Single', '').replace(' - EP', ''), album_name).ratio() - print() - print('album name diff inverted:', end='') - print(collection_name_diff) - print('released day diff: ', end='') - print(1 / (abs((itunes_released_date - released_date).days) + 1)) + print('album name diff :{}'.format(collection_name_diff)) + + released_date_diff = abs((itunes_released_date - released_date).days) + print('released day diff: {}'.format(released_date_diff)) + artist_name_diff = difflib.SequenceMatcher(None, content['artistName'], artist_name).ratio() - print('artist name diff: ', end='') - print(artist_name_diff) - print('length diff: ', end='') - print(1 / (abs(int(content['trackTimeMillis'] / 1000) - length) + 1)) - print(collection_name_diff + - 1 / (abs((itunes_released_date - released_date).days) + 1) + - artist_name_diff + - 1 / (abs(int(content['trackTimeMillis'] / 1000) - length) + 1)) - - sort_list.append([content, collection_name_diff + - 1 / (abs((itunes_released_date - released_date).days) + 1) + - artist_name_diff + - 1 / (abs(int(content['trackTimeMillis'] / 1000) - length) + 1)]) + print('artist name diff: {}'.format(artist_name_diff)) + + length_diff = abs(int(content['trackTimeMillis'] / 1000) - length) + print('length diff: {}'.format(length_diff)) + + if (collection_name_diff < 0.7) or (released_date_diff > 100) or (artist_name_diff < 0.7) or (length_diff > 20): + print("Too far from input...\n\n\n") + continue + + sort_list.append([content, customized_data, collection_name_diff + 1 / (released_date_diff + 1) + + artist_name_diff + 1 / (length_diff + 1)]) + print("\n\n\n") + if not sort_list: + sys.stdout = sys.__stdout__ + return [None, None, 0] pprint.pprint(sorted(sort_list, key=operator.itemgetter(1))[-1]) sys.stdout = sys.__stdout__ return sorted(sort_list, key=operator.itemgetter(1))[-1] -print(search_on_itunes_v2(song_name='おねがいネイル', album_name='モーニング刑事。', length=249, - released_date=datetime.datetime.strptime('1998/09/30', '%Y/%m/%d').date(), - artist_name='モーニング娘。&平家みちよ', - debug=True)) - -print(search_on_itunes_v2(song_name='My Days for You', album_name='真野恵里菜', length=261, - released_date=datetime.datetime.strptime('2011/06/29', '%Y/%m/%d').date(), - artist_name='真野恵里菜', - debug=True)) +# res = search_on_itunes_v2(song_name='My Days for You', album_name='My Days for You', length=261, +# released_date=datetime.datetime.strptime('2011/06/29', '%Y/%m/%d').date(), +# artist_name='真野恵里菜', +# debug=False) +# pprint.pprint(res[1]) def search_on_itunes(search_keyword, artist_keyword="", debug=False):