def parse(self): header_col_count = 0 for table in self.tables: trs = table.find_all("tr") day_list = [] for idx, tr in enumerate(trs): if idx == 0 and tr.find_all("th")[0].string != 'Release date': # if TBD, go onto next table break if idx == 0: # Skip header (th) header_col_count = len(tr.find_all("th")) continue tds = tr.find_all('td') music = Music() td_start_idx = 0 if len(tds) == header_col_count: day_list = [] try: dt = self.get_date_from_tag(tds[td_start_idx]) except ValueError: dt = None td_start_idx += 1 music.artist = self.get_artist_list_from_tag(tds[td_start_idx]); music.album = self.get_album_from_tag(tds[td_start_idx + 1]); music.genre = self.get_genre_list_from_tag(tds[td_start_idx + 2]); if dt is not None: day_list.append(music) self.result[dt] = day_list
def create(data): form = MusicForm(data=data) if form.validate(): pass else: abort(400) music = Music() music.title = form.title.data music.url = extract_video_id(form.url.data) music.notes = form.notes.data return music.put()
def process_request(self, request): query = Music.objects.all() request.current_music = spotify.music_name() if not request.current_music: raise Exception('Unable to get current music name') if query.count() == 0 or query[0].name != request.current_music: # delete everything \o/ Vote.objects.all().delete() Music.objects.all().delete() music = Music(name=request.current_music) music.save()
def get_by_id(id): music = Music.get_by_id(id) form = MusicForm() form.title.data = music.title form.url.data = music.url form.notes.data = music.notes return music, form
def update_by_id(id, data): form = MusicForm(data=data) music = Music.get_by_id(id) music.title = form.title.data music.notes = form.notes.data music.youtube = form.url.data return music.put()
def updateMusicControler(self, request): if request.method == 'PUT': status = 200 [sessionid, response] = self.ulity.isEmptySession(request.session) if sessionid == None: response["message"] = Constant.FAIL_UPDATEMUSICLIST return HttpResponse(content=simplejson.dumps(response), status=status) is_login = self.uservice.isLogin(sessionid) req = simplejson.loads(request.body) if is_login == Constant.ERROR_LOGIN_NOLOGIN: response['message'] = Constant.FAIL_UPDATEMUSICLIST response['data'] = {} response['data']['error'] = is_login else: music = Music(MUSIC_ID=req["musicid"],MUSIC_NAME=is_login, MUSIC_LIST=','.join(req["musicname"])) update_musiclist_message = self.musicservice.updateMusicList(music) if update_musiclist_message != Constant.SUCCESS_UPDATEMUSICLIST: response["message"] = Constant.FAIL_UPDATEMUSICLIST response["data"] = {} response["data"]["error"] = update_musiclist_message else: response["message"] = Constant.SUCCESS_UPDATEMUSICLIST response["musicid"] = music.MUSIC_ID status = 200 return HttpResponse(content=simplejson.dumps(response), status=status)
def add_music(): """Renders the page for adding music, as well as handling the addition of a piece of music into the database.""" error = False status = None form = AddMusicForm() styles = Style.query.all() authors = OriginalAuthor.query.all() # [('', '')] is default - None form.style.choices = [('', '')] + [(i.style, i.style) for i in Style.query.all()] # TODO: see if there's a way to have ('', '') as an option # despite coerce=int form.original_author.choices = [(i.id, i.name) for i in OriginalAuthor.query.all()] form.instruments.choices = [(i.id, i.name) for i in Instrument.query.order_by('name')] if form.validate_on_submit(): try: # Turn list of instrument IDs into list of instrument objects to # make flask happy instruments = [ Instrument.query.get(i) for i in form.instruments.data ] music = Music( name=form.name.data, year=form.year.data, url=form.url.data, sheet_url=form.sheet_url.data, style_id=form.style.data, original_author_id=form.original_author.data, instruments=instruments, ) db.session.add(music) db.session.commit() flash("Music added successfully.") except exc.IntegrityError as err: error = True print('/admin/music/:', err) flash( "Something went wrong with adding the music. Please try again." ) except Exception as err: error = True print("Unexpected error:", err) flash( "Something went wrong with adding the music. Please try again." ) return render_template('admin_music.html', title="Admin", error=error, form=form, styles=styles)
def create_music(): form = MusicForm() if form.is_submitted(): try: filename = music.save(request.files['music']) url = music.url(filename) new_music = Music(request.form['title'], request.form['album'], request.form['artist'], url) new_music.user_id = current_user.get_id() db.session.add(new_music) db.session.commit() try: task = s3_upload.apply_async([new_music.id, filename]) except Exception as e: print(e) return redirect(url_for('home.list_music')) except Exception as e: print(e) return render_template('home/add_music.html', form=form, title="Add Music")
def get_vip_music(): with app.app_context(): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36', } session = requests.Session() response = session.get('https://www.kuwo.cn/', headers=headers) kw_token = dict(response.cookies) h = dict(response.headers) headers.update({ 'csrf': kw_token['kw_token'], }) url = 'https://www.kuwo.cn/api/www/bang/bang/musicList' bangId = [17, 145, 93, 158, 16] bangId = random.choice(bangId) params = { 'bangId': bangId, #145会员榜 17新歌榜 93飙升榜 158抖音 'pn': 1, 'rn': 90, 'httpsStatus': 1, } all_song = session.get(url=url, params=params, headers=headers).json() all_song = all_song['data']['musicList'] for song in all_song: name = song['name'] rid = song['rid'] singer = song['artist'] length = song['songTimeMinutes'] album = song['album'] pic = song['pic'] # print(name,'获取成功') music = Music(name=name, rid=rid, artist=singer, album=album, pic=pic, time_length=length) try: db.session.add(music) db.session.commit() except Exception as e: print(name, '添加失败') # print(e) db.session.rollback()
def add_picture_submit(): def allowed_file(filename): return '.' in filename and filename.rsplit('.',1)[1] in ALLOWED_EXTENSIONS if request.method == 'POST': file = request.files['file'] file_m = request.files['file1'] address = request.form.get("address") name = request.form.get("title") if file and allowed_file(file.filename) and file_m and allowed_file(file_m.filename): filetype = file.filename.rsplit('.',1)[1] filetype_m = file_m.filename.rsplit('.',1)[1] # 文档格式 filename = secure_filename(file.filename) filename_m = secure_filename(file_m.filename) # 文件类型admin/product savename = name+"."+filetype savename_m = name+"."+filetype_m savepath = UPLOAD_FOLDER+address+"/"+savename address_p = DOWNLOAD_FOLDER+address+"/"+savename savepath_m = UPLOAD_FOLDER_MUSIC+address+"/"+savename_m address_m = DOWNLOAD_FOLDER_MUSIC+address+"/"+savename_m count1 = db.session.query(db.func.count('*')).select_from(Picture).filter(Picture.name==name).scalar() count2 = db.session.query(db.func.count('*')).select_from(Music).filter(Music.name==name).scalar() print "save name is ",savename print "save path is ",savepath if count1 > 0 and count2 >0: return "该文件已经存在,如果想继续储存,请修改文件英文名称" else: try: pic = Picture(name=name, situation=address, address=address_p) music = Music(name=name, situation=address, address=address_m) db.session.add(pic) db.session.add(music) db.session.commit() except Exception, e: raise e # raise Exception("该文件已经存在") file.save(savepath) file_m.save(savepath_m) return redirect(url_for("main.add_picture"))
def createmusic(): IPStore("Manage: Music Create Attempt") for i in range(int(request.form.get("song-add-counter")) + 1): artist = request.form.get("artist") album = request.form.get("album") song = request.form.get("song" + str(i)) trackno = request.form.get("trackno" + str(i)) sc_api = request.form.get("sc_api" + str(i)) descript = request.form.get("descript" + str(i)) descript = mdown(descript) descript = descript.replace("\n", "") music = Music(artist=artist, album=album, song=song, trackno=trackno, sc_api=sc_api, descript=descript) db.session.add(music) db.session.commit() return redirect(url_for('manage'))
def upload_music(): music_file = request.files['mp3'] img_file = request.files['img'] cover_file = request.files['cover'] music_file_info = save_file(music_file) img_file_info = save_file(img_file) cover_file_info = save_file(cover_file) title = request.form.get("title", music_file.filename) artist = request.form.get("artist", "") album = request.form.get("album", "") cover = cover_file_info["uuid"] mp3 = music_file_info["uuid"] img = img_file_info["uuid"] music = Music( title=title, artist=artist, album=album, cover=cover, mp3=mp3, img=img, create_time=datetime.now(), update_time=datetime.now() ) db.session.add(music) db.session.commit() return jsonify({ "status": "success", "data": { "title": title, "artist": artist, "album": album, "cover": cover, "mp3": mp3, "img": img, } })
def music(): if request.method == 'GET': musicList = Music.query.all() output = [] for music in musicList: music_data = { 'id': music.id, 'names': music.name, 'duration': music.duration, 'artists': music.artist, 'genres': music.genre } output.append(music_data) return jsonify(music=output) if request.method == 'POST': music = Music(name=request.json['name'], artist=request.json['artist'], genre=request.json['genre'], duration=request.json['duration']) db.session.add(music) db.session.commit() return {'id': music.id}
def manage(): if not "admin_id" in session: return abort(403) # 创建自定义的表单类 author_form = AuthorForm() # 验证函数 if author_form.validate_on_submit(): # 验证通过获取数据 author_name = author_form.author.data music_name = author_form.music.data # 判断歌手是否存在 author = Author.query.filter_by(author_name=author_name).all() # 如果歌手存在 if author: # 判断歌曲是否存在,没有重复歌曲就添加,如果重复就提示错误 music = Music.query.filter_by(music_name=music_name).all() # 如果重复就提示错误 if music: flash('已存在') # 没有重复歌曲就添加歌曲 else: try: new_music = Music(music_name=music_name, author=author_name, style=author_form.style.data, free=author_form.free.data, address=author_form.address.data) db.session.add(new_music) db.session.commit() flash("添加成功") except Exception as e: print(e) flash('添加歌曲失败') db.session.rollback() else: # 如果歌手不存在,添加歌手和歌曲 try: new_author = Author(author_name=author_name) db.session.add(new_author) db.session.commit() new_music = Music(music_name=music_name, author=author_name, style=author_form.style.data, free=author_form.free.data, address=author_form.address.data) db.session.add(new_music) db.session.commit() flash("添加成功") except Exception as e: print(e) flash('添加歌手和歌曲失败') db.session.rollback() else: if request.method == 'POST': flash('参数不全') authors = Author.query.all() musics = Music.query.all() return render_template('admin/index.html', author=authors, music=musics, form=author_form)
def get_all(): return Music.query().order(-Music.date_added).fetch()
def delete_by_id(id): return Music.get_by_id(id).key.delete()
def download_sync_music(music): song_name = music.get('song_name') song_id = music.get('song_id') singer_name = music.get('singer_name') singer_id = music.get('singer_id') audition_list = music.get('audition_list') album_id = music.get('album_id') album_name = music.get('album_name') audition = audition_list[-1] url = audition.get('url') duration = audition.get('duration') suffix = audition.get('suffix') bit_rate = audition.get('bitRate') type_description = audition.get('typeDescription') size = audition.get('size') pic_url = music.get('mv_list')[0].get('pic_url') if music.get( 'mv_list') else '' if not Query(Music).equal_to('song_id', song_id).find(): filename = u'{}-{}.mp3'.format(song_name, singer_name) f = File(filename, StringIO.StringIO(urllib2.urlopen(url).read())) f.save() picture = None if pic_url: picture_name = u'{}-{}.jpg'.format(song_name, singer_name) picture = File(picture_name, StringIO.StringIO(urllib2.urlopen(pic_url).read())) picture.save() m = Music() m.file = f m.duration = duration m.suffix = suffix m.bit_rate = bit_rate m.type_description = type_description m.size = size m.song_name = song_name m.song_id = song_id m.singer_name = singer_name m.singer_id = singer_id m.album_id = album_id m.album_name = album_name if picture: m.picture = picture m.save()
def get_playlist(): with app.app_context(): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36', } url = 'https://www.kuwo.cn/api/pc/classify/playlist/getRcmPlayList' order = random.choice(['hot', 'new']) params = { 'pn': 1, 'rn': 10, 'order': order, # new/hot 最新/最热 'httpsStatus': 1, } res = requests.get(url=url, headers=headers, params=params) if res.status_code == 200: page_text = res.json() playlist_ids = jsonpath(page_text, '$..id') for i in playlist_ids: pid = i detail_url = 'https://www.kuwo.cn/playlist_detail/' + i res = requests.get(url=detail_url, headers=headers) if res.status_code == 200: detail_page = res.text tree = etree.HTML(detail_page) title = tree.xpath( '//*[@id="__layout"]/div/div[2]/div/div[1]/div[2]/div[1]/p[1]/text()' )[0] info = tree.xpath( '//*[@id="__layout"]/div/div[2]/div/div[1]/div[1]/p[2]/text()' )[0] # print(title, info) slist = tree.xpath( '//*[@id="__layout"]/div/div[2]/div/div[1]/div[2]/div[1]/div[2]/div[1]/ul/li' ) # cover = tree.xpath('//*[@id="__layout"]/div/div[2]/div/div[1]/div[1]/div[1]/img/@src')[0] #无效图片 script = re.findall('data:(\[.*?\]),fetch:', detail_page)[0] rids = re.findall(r'rid:(\d+)', script) cover = re.search('img700.*?"(.*?)",', detail_page).group( 1).encode('utf-8').decode("unicode_escape") song_num = len(rids) try: playlist = Playlist( name=title, info=info, pid=pid, cover=cover, ) # playlist = Playlist.query.filter_by(pid=pid).first() # playlist.cover = cover db.session.add(playlist) db.session.commit() print(title, '歌单添加成功') except Exception as e: # print(e) print(title, '添加失败') db.session.rollback() else: for i in range(song_num): rid = rids[i] name = slist[i].xpath('./div[2]/a/text()')[0] artist = slist[i].xpath('./div[3]//text()')[0] timelength = slist[i].xpath('./div[5]//text()')[0] # print(name, artist, timelength, rid) try: music = Music( name=name, artist=artist, time_length=timelength, rid=rid, playlist=Playlist.query.filter_by( pid=pid).first()) db.session.add(music) db.session.commit() print(name, '添加成功') except Exception as e: # print(e) print(name, '添加歌曲失败') db.session.rollback() else: print('获取歌单详情页失败') time.sleep(3) else: print('获取歌单列表失败')