Files
AM-Exporter/user/export.py
√(noham)² 828e481d1d changes
2024-03-03 15:52:50 +01:00

104 lines
3.4 KiB
Python

import subprocess
import sys
import time
from datetime import datetime
import json
import requests
from pprint import pprint
import os
from dotenv import load_dotenv
load_dotenv()
USER = os.getenv("USER")
PASSWORD = os.getenv("PASSWORD")
stdout_file = 'logfile.log'
stderr_file = 'error_logfile.log'
sys.stdout = open(stdout_file, 'a')
sys.stderr = open(stderr_file, 'a')
def printout(content):
print(f"{datetime.now().strftime('%H:%M:%S')} : {content}", file=sys.stdout)
sys.stdout.flush()
def printerr(content):
print(f"{datetime.now().strftime('%H:%M:%S')} : An error occurred: {str(content)}", file=sys.stderr)
sys.stderr.flush()
def get_current_song():
try:
output = subprocess.check_output(['osascript', 'export.applescript']).decode('utf-8').strip()
return output
except subprocess.CalledProcessError as e:
printerr(e)
return e
def get_track_extras(song, artist, album):
query = f"{song} {artist} {album}"
params = {"media": "music", "entity": "song", "term": query}
r = requests.get("https://itunes.apple.com/search", params=params)
json_data = r.json()
if json_data["resultCount"] == 1:
result = json_data["results"][0]
elif json_data["resultCount"] > 1:
result = json_data["results"][0]
else :
result = ''
artwork_url = result["artworkUrl100"] if result else None
itunes_url = result["trackViewUrl"] if result else None
artist_url = result["artistViewUrl"] if result else None
return (artwork_url, itunes_url, artist_url)
def post(currentsong):
currentsong['user'] = USER
currentsong['password'] = PASSWORD
data = json.dumps(currentsong)
try:
r = requests.post(url+'/music/set', data=data, headers=headers)
if r.status_code != 200:
return r.status_code
else :
return r.text
except Exception as e:
print(f"An error occurred: {str(e)}", file=sys.stderr)
url = "https://api.noh.am" #RUN WEB
url = "http://127.0.0.1:5000" #DEV
url = "http://0.0.0.0:3005"
headers = {'Content-Type': 'application/json'}
def main():
persistendId = ''
prevstatus = ''
while True:
# print('getting data..', file=sys.stdout)
# currentsong = json.loads(str(get_current_song()).replace("'''", '"'))
currentsong = json.loads(get_current_song())
if currentsong['status'] == 'playing':
if currentsong['persistent ID'] != persistendId:
persistendId = currentsong['persistent ID']
currentsong['timestamp'] = time.time()
(currentsong['artwork_url'], currentsong['itunes_url'], currentsong['artist_url']) = get_track_extras(currentsong['name'], currentsong['artist'], currentsong['album'])
printout(f"{post(currentsong)}")
timets = float(currentsong['duration'].replace(",", "."))-float(currentsong['pPosition'].replace(",", ".")) + 3
prevstatus = 'playing'
elif currentsong['status'] == 'not playing' and prevstatus != 'not playing':
prevstatus = 'not playing'
printout(f"{post({'status' : 'not playing'})}")
timets = 5*60
elif currentsong['status'] == 'not running' and prevstatus != 'not running':
prevstatus = 'not running'
printout(f"{post({'status' : 'not running'})}")
timets = 5*60
else:
timets = 5*60
time.sleep(timets)
if __name__ == "__main__":
main()