Beispiel #1
0
 def view_down(self, playlist_id, path="."):
     list = self.get_playlist(str(playlist_id))
     msg = {"success": 0, "failed": 0, "failed_list": []}
     for music in list['tracks']:
         pylog.print_info(
             "正在下载歌曲 {}-{}.mp3".format(
                 tools.encode(music['name']),
                 tools.encode(music['artists'][0]['name'])
             )
         )
         link = self.get_mp3_link(music["id"])
         if link is None:
             msg["failed"] = msg["failed"] + 1
             msg["failed_list"].append(music)
             continue
         r = requests.get(link)
         with open("{}/{}-{}{}".format(
             path,
             tools.encode(music['name']).replace("/", "-"),
             tools.encode(music['artists'][0]['name']).replace("/", "-"),
             ".mp3"
         ), "wb") as code:
             code.write(r.content)
             msg["success"] = msg["success"] + 1
     pylog.print_warn(
         "下载成功:{} 首,下载失败:{}首".format(msg["success"], msg["failed"])
     )
     tb = [["歌曲名字", "艺术家", "ID"]]
     for music in msg["failed_list"]:
         n = music['name'].encode("utf-8")
         a = music['artists'][0]['name'].encode("utf-8")
         i = music['id']
         tb.append([n, a, i])
     print(AsciiTable(tb).table)
Beispiel #2
0
 def create_update_strategy(self, **kwargs):
     date = (datetime.datetime.now() + datetime.timedelta(days=kwargs["date"])).strftime("%Y-%m-%d %H:%S:%M")
     self.session.query(pysql.Playlist163).filter(pysql.Playlist163.done == "Y",
                                             pysql.Playlist163.update_time > date).update(
         {"done": "N", "update_time": datetime.datetime.now().strftime("%Y-%m-%d %H:%S:%M")})
     self.session.commit()
     pylog.print_info("完成 重置时间 {} 之后的歌单,可重新抓取歌曲".format(date))
Beispiel #3
0
def print_pdf(id):
    data = read_playlist_json(id)
    if data["code"] != 200:
        pylog.print_warn("歌单信息拉取失败!")
        return

    document = Document()
    try:
        document.add_heading(data["result"]["name"], 0)
        tags = document.add_paragraph(" ".join(data["result"]["tags"]))
        desc = document.add_paragraph(data["result"]["description"])
        for m in data["result"]["tracks"]:
            document.add_paragraph().add_run(m["name"]).font.color.theme_color = MSO_THEME_COLOR_INDEX.ACCENT_2

            lyric = read_lyric_data(m["id"])
            document.add_paragraph().add_run(lyric["lrc"]["lyric"]).font.color.theme_color = MSO_THEME_COLOR_INDEX.ACCENT_3

            comments = read_comment_data(m["id"])
            for c in comments["hotComments"]:
                author = document.add_paragraph().add_run(c["user"]["nickname"]).style = 'Emphasis'
                content = document.add_paragraph(c["content"])
    except Exception as e:
        pylog.print_warn(e)

    document.save("{}.docx".format(data["result"]["name"]))
    pylog.print_info("文档 {}.docx 已经生成!".format(data["result"]["name"]))
Beispiel #4
0
 def clear_playlist(self,playlist_id=2098905487):
     m = music.Music()
     data = m.curl_playlist(playlist_id)
     for d in data["tracks"]:
         res = self.post_playlist_delete([str(d["id"]),],playlist_id)
         if res["code"] == 200:
             pylog.print_info("成功删除《{}》到指定歌单,歌单目前包含歌曲 {} 首".format(d["name"],res["count"]))
         else:
             pylog.print_warn("歌曲《{}》不存在于歌单中!".format(d["name"]))
     pylog.print_warn("删除歌单歌曲任务完成,请检查!")
Beispiel #5
0
 def create_playlist_comment_top100(self,playlist_id=2098905487):
     data = settings.Session.query(pysql.Music163.song_name, pysql.Music163.song_id,pysql.Music163.comment.label("count")).order_by(
         pysql.Music163.comment.label("count").desc()).limit(60).all()
     for d in data:
         res = self.post_playlist_add([str(d[1]),],playlist_id)
         if res["code"] == 502:
             pylog.print_warn("歌曲《{}》已经存在于歌单中!".format(d[0]))
         if res["code"] == 200:
             pylog.print_info("成功添加《{}》到指定歌单,歌单目前包含歌曲 {} 首".format(d[0],res["count"]))
     pylog.print_warn("增加歌单歌曲任务完成,请检查!")
Beispiel #6
0
 def toplist(self):
     msc = music.Music()
     cmt = comment.Comment(comment.Comment.Official)
     for id in uapi.top:
         pylog.print_info('正在抓取官方排行榜 歌单ID:{} 歌单名字:{}'.format(id, uapi.top[id]))
         msc.view_capture(id)
     cnt = int(self.app.pargs.count)
     if cnt <= 0:
         print(Fore.RED + "不合法的--count -c 变量( > 0 )")
     else:
         cmt.auto_view(cnt)
Beispiel #7
0
def is_correct_db():
    db = config.format_db()
    pylog.print_info("正在检查配置的数据库格式和可用性")
    if db is None:
        print("  - 配置文件中 db 选项  {}".format(pylog.red("不正确")))
    else:
        print("  - 账号:{} 密码:{} IP:{} 数据库:{}".format(db["user"], db["password"],
                                                    db["ip"], db["database"]))
        try:
            from sqlalchemy import create_engine
            create_engine(db["link"], echo=False).execute("show databases")
            print("数据库连接验证                {}".format(pylog.green("成功")))
        except Exception as e:
            pylog.print_err("数据库连接失败,上述配置信息有问题: {}".format(e))
Beispiel #8
0
 def view_down(self, playlist_id, path="."):
     list = self.get_playlist(playlist_id)
     for music in list['tracks']:
         pylog.print_info("正在下载歌曲 {}-{}.mp3".format(
             music['name'].encode("utf-8"),
             music['artists'][0]['name'].encode("utf-8")))
         link = self.get_mp3_link(music["id"])
         r = requests.get(link)
         with open(
                 "{}/{}-{}{}".format(
                     path, music['name'].encode("utf-8").replace("/", "-"),
                     music['artists'][0]['name'].encode("utf-8").replace(
                         "/", "-"), ".mp3"), "wb") as code:
             code.write(r.content)
Beispiel #9
0
def print_comment(count):
    session = settings.Session()
    comments = session.query(pysql.Comment163).order_by(
        desc(pysql.Comment163.liked)).limit(count)
    document = Document()
    workbook = Workbook()
    try:
        document.add_heading("TOP {} 评论".format(count), 0)
        sheet = workbook.add_sheet("TOP {} 评论".format(count))
        i = 0
        sheet.write(i, 0, "歌曲名字")
        sheet.write(i, 1, "评论作者")
        sheet.write(i, 2, "评论内容")
        sheet.write(i, 3, "点赞数量")
        sheet.write(i, 4, "歌曲链接")
        for c in comments:
            i = i + 1
            song = session.query(
                pysql.Music163).filter(pysql.Music163.song_id == c.song_id)
            pylog.print_info("正在填充第 {} 条评论,歌曲:{}".format(i, song[0].song_name))
            document.add_paragraph().add_run(
                "作者:{}".format(c.author)
            ).font.color.theme_color = MSO_THEME_COLOR_INDEX.ACCENT_2
            document.add_paragraph().add_run("内容:{}".format(
                c.txt)).font.color.theme_color = MSO_THEME_COLOR_INDEX.ACCENT_2
            document.add_paragraph().add_run(
                "歌曲:《{}》 链接:http://music.163.com/#/song?id={}".format(
                    song[0].song_name, c.song_id
                )).font.color.theme_color = MSO_THEME_COLOR_INDEX.ACCENT_2
            document.add_paragraph().add_run(
                "赞同:{}".format(c.liked)
            ).font.color.theme_color = MSO_THEME_COLOR_INDEX.ACCENT_2
            document.add_paragraph("")

            sheet.write(i, 0, song[0].song_name)
            sheet.write(i, 1, c.author)
            sheet.write(i, 2, c.txt)
            sheet.write(i, 3, c.liked)
            sheet.write(i, 4,
                        "http://music.163.com/#/song?id={}".format(c.song_id))

    except Exception as e:
        pylog.print_warn(e)
    document.save("TOP {} 评论.docx".format(count))
    pylog.print_warn("\n完成文档 TOP {} 评论.docx 的生成!\n".format(count))

    workbook.save("TOP {} 评论.xls".format(count))
    pylog.print_warn("\n完成文档 TOP {} 评论.xls 的生成!\n".format(count))
Beispiel #10
0
def is_correct_config():
    pylog.print_info("正在检查配置路径:{}".format(config.PATH))
    if not os.path.exists(config.PATH + "/spider163.conf"):
        print("  - 配置路径下 spider163.conf {}".format(pylog.red("不存在")))
    else:
        print("  - 配置路径下 spider163.conf {}".format(pylog.green("存在")))
    pylog.print_info("正在检查配置文件 {}/spider163.conf 内容是否完整".format(config.PATH))
    try:
        config.cf.get("core", "db")
        print("  - 配置文件中 db   选项      {}".format(pylog.green("存在")))
    except Exception:
        print("  - 配置文件中 db   选项      {}".format(pylog.red("不存在")))
    try:
        config.cf.get("core", "port")
        print("  - 配置文件中 port 选项      {}".format(pylog.green("存在")))
    except Exception:
        print("  - 配置文件中 port 选项      {}".format(pylog.red("不存在")))
Beispiel #11
0
def music(playlist_id):
    if playlist_id not in uapi.top.keys():
        pylog.print_info("歌单 {} 不在合法排行榜序列,合法歌单如下".format(playlist_id))
        tb = [['歌单ID', '歌单名字']]
        for k, v in uapi.top.items():
            tb.append([k, v])
        pylog.Table(tb)
        return
    data = settings.Session.query(
        pysql.Toplist163.song_name,
        pysql.Toplist163.song_id, pysql.Toplist163.author,
        pysql.Toplist163.comment.label("count")).filter(
            pysql.Toplist163.playlist_id == playlist_id,
            pysql.Toplist163.mailed == "N").order_by(
                pysql.Toplist163.id.asc()).slice(1, 5).all()

    page = []
    body = version.MAILBODY
    title = version.MAILMUSIC
    comments = version.MAILCOMMENT
    for m in data:
        settings.Session.query(pysql.Toplist163).filter(
            pysql.Toplist163.song_id == m[1]).update({'mailed': 'Y'})
        settings.Session.commit()
        detail = ""
        cms = settings.Session.query(pysql.Comment163).filter(
            pysql.Comment163.song_id == m[1]).order_by(
                pysql.Comment163.id).all()
        for c in cms:
            detail = detail + comments.format(c.author, c.liked, c.txt)
        head = title.format(m[1], m[0], m[2], m[3], detail)
        page.append(head + detail)
    body = body.format(uapi.top[playlist_id], "<br>".join(page))

    host, port, users = config.get_mail()
    for user in users.split(","):
        mail.send_email(host, port, "spider163每日网易云音乐分享", user, body)
Beispiel #12
0
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from spider163 import settings
from spider163.utils import pylog
try:
    settings.configure_orm()
except Exception as e:
    pylog.print_info("无法执行数据库相关的任务: {}".format(e))