Esempio n. 1
0
	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
Esempio n. 2
0
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()
Esempio n. 3
0
    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()
Esempio n. 4
0
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
Esempio n. 5
0
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()
Esempio n. 6
0
 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)
Esempio n. 7
0
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)
Esempio n. 8
0
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")
Esempio n. 9
0
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()
Esempio n. 10
0
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"))
Esempio n. 11
0
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'))
Esempio n. 12
0
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,
        }
    })
Esempio n. 13
0
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}
Esempio n. 14
0
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)
Esempio n. 15
0
def get_all():
	return Music.query().order(-Music.date_added).fetch()
Esempio n. 16
0
def delete_by_id(id):
	return Music.get_by_id(id).key.delete()
Esempio n. 17
0
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()
Esempio n. 18
0
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('获取歌单列表失败')