Skip to content

Instantly share code, notes, and snippets.

@ToshihitoKon
Last active June 17, 2019 09:34
Show Gist options
  • Save ToshihitoKon/bd26d63fdc969826fb9af28bc776ce50 to your computer and use it in GitHub Desktop.
Save ToshihitoKon/bd26d63fdc969826fb9af28bc776ce50 to your computer and use it in GitHub Desktop.
mpdApi.py
import json
from flask import Flask, request
from flask_cors import CORS
import subprocess
import codecs
import chardet
import re
app = Flask(__name__)
CORS(app)
@app.route('/api/toggle')
def toggle():
output = subprocess.check_output(['mpc', 'toggle'])
status = re.search(r"\[[a-zA-Z]+\]", output.decode('utf-8'))
payload = status_payload()
return json.dumps(payload, ensure_ascii=False), 200
@app.route('/api/status')
def status():
payload = status_payload()
return json.dumps(payload, ensure_ascii=False), 200
@app.route('/api/next')
def next():
output = subprocess.check_output(['mpc', 'next'])
payload = status_payload()
return json.dumps(payload, ensure_ascii=False), 200
@app.route('/api/prev')
def prev():
output = subprocess.check_output(['mpc', 'prev'])
payload = status_payload()
return json.dumps(payload, ensure_ascii=False), 200
@app.route('/api/playlist/jazz')
def jazz():
subprocess.check_output(['mpc', 'clear'])
subprocess.check_output(['mpc', 'load', 'jazz'])
subprocess.check_output(['mpc', 'shuffle'])
subprocess.check_output(['mpc', 'play'])
payload = status_payload()
return json.dumps(payload, ensure_ascii=False), 200
@app.route('/api/playlist/bill_evans')
def bill_evans():
subprocess.check_output(['mpc', 'clear'])
subprocess.check_output(['mpc', 'load', 'bill_evans'])
subprocess.check_output(['mpc', 'play'])
payload = status_payload()
return json.dumps(payload, ensure_ascii=False), 200
@app.route('/api/playlist/NakatsukaTakeshi')
def NakatsukaTakeshi():
subprocess.check_output(['mpc', 'clear'])
subprocess.check_output(['mpc', 'load', 'NakatsukaTakeshi'])
subprocess.check_output(['mpc', 'play'])
payload = status_payload()
return json.dumps(payload, ensure_ascii=False), 200
@app.route('/api/volume')
def get_volume():
volume = request.args.get('num')
if volume == None:
output = subprocess.check_output(['mpc', 'volume'])
else:
output = subprocess.check_output(['mpc', 'volume', volume])
status = re.search(r'volume:\s[0-9]+\%', output.decode('utf-8'))
if status:
return re.sub(r'[^0-9]','',status.group(0)), 200
return 'failed', 500
if __name__ == '__main__':
app.run(debug=True)
def status_payload():
b = subprocess.check_output(['mpc', 'status'])
output = b.decode().split('\n')
current_status = (re.search(r'\[([a-zA-Z]+)\]', output[1]).group(1) == "playing")
song_artist = output[0].split(" - ")[0]
song_title = output[0].split(" - ")[1]
song_position = re.search(r'([0-9]+:[0-9]+)/', output[1]).group(1)
song_total = re.search(r'/([0-9]+:[0-9]+)', output[1]).group(1)
song_progress = re.search(r'([0-9:]+)%', output[1]).group(1)
current_volume = re.search(r'volume: ([0-9]+)%', output[2]).group(1)
payload = {
'isplaying': current_status,
'artist': song_artist,
'title': song_title,
'position': song_position,
'total': song_total,
'progress': song_progress,
'volume': current_volume,
}
return payload
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment