用PyQt抄了个桌面豆瓣FM客户端 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
mckelvin
V2EX    Python

用PyQt抄了个桌面豆瓣FM客户端

  •  
  •   mckelvin
    mckelvin 2013-05-05 00:48:30 +08:00 9541 次点击
    这是一个创建于 4593 天前的主题,其中的信息可能已经有所发展或是发生改变。
    今天花了一天写的这个,还没完工,未来几天慢慢完善,现在基本功能都可以正常使用,界面基本抄网页版豆瓣FM。

    这是一个System Tray Application(似乎没这术语),简单地说它不会单独弹出一个窗口显示内容,而是通过点击系统托盘上的图标切换显示,图标右键是菜单。

    暂时想到两个相比网页版本豆瓣FM的好处:

    - no flash
    - 任何时候都可以方便地点击托盘来查看当前歌曲(否则要切到浏览器的特定一个tab)

    项目地址:

    https://github.com/mckelvin/doubanfm-cli-for-linux/tree/gui

    截图:

    https://github.com/mckelvin/doubanfm-cli-for-linux/raw/gui/misc/preview.png
    第 1 条附言    2013-05-14 14:05:58 +08:00
    项目名字从`doubanfm-cli-for-linux` 更名为 `doubanfm-for-linux`
    代码已merge到master分支

    新地址: https://github.com/mckelvin/doubanfm-for-linux
    34 条回复    1970-01-01 08:00:00 +08:00
    yexiaoxing
        1
    yexiaoxing  
       2013-05-05 00:56:03 +08:00
    谁能抄个亦歌的呢。。
    我能提供API
    zythum
        2
    zythum  
       2013-05-05 01:11:31 +08:00
    亦歌 用过。然后没有了
    ziseyinzi
        3
    ziseyinzi  
       2013-05-05 02:18:11 +08:00 via Android
    不错,明天试试
    yexiaoxing
        4
    yexiaoxing  
       2013-05-05 03:48:33 +08:00 via iPad
    lennyh
        5
    lennyh  
       2013-05-05 14:03:45 +08:00
    @yexiaoxing 啥API,那个小的swf?
    http://code.google.com/p/1g1g/
    greatghoul
        6
    greatghoul  
       2013-05-05 21:02:37 +08:00 via Android
    @yexiaoxing 其实我也是忠实的亦歌用户。
    jamiesun
        7
    jamiesun  
       2013-05-06 10:20:08 +08:00   1
    听过几天亦歌,音源质量参差不齐,也是没有然后了
    yexiaoxing
        8
    yexiaoxing  
       2013-05-06 17:52:28 +08:00 via Android
    @lennyh rest api
    sgsheg
        9
    sgsheg  
       2013-05-06 18:13:52 +08:00
    不错了
    eary
        10
    eary  
       2013-05-06 19:46:36 +08:00
    @yexiaoxing API包括“like” “播放接口”么?
    YUCOAT
        11
    YUCOAT  
       2013-05-06 20:18:18 +08:00
    你的源码有问题,我不是很懂Python,刚刚clone了你的代码,运行的时候发现一个这样的问题,在
    src/doubanfm.py的44行中有这样一行代码:

    self.http_session = requests.session(cookies=self.http_cookies)

    但是在执行的时候解释器说requests.session()是没有参数。我查阅了requests的文档,也没有发现参数。
    gouera
        12
    gouera  
       2013-05-06 20:28:41 +08:00
    为什么不说怎么用呢。。。。 我 python doubanfm 提示
    SCRIPT=`realpath $0`
    ^
    SyntaxError: invalid syntax
    google无果。。这是什么意思啊
    yexiaoxing
        13
    yexiaoxing  
       2013-05-06 22:58:37 +08:00 via Android
    @eary 目前先提供搜索和读取收藏的接口,
    mckelvin
        14
    mckelvin  
    OP
       2013-05-07 13:07:29 +08:00
    @YUCOAT 我查看了下requests的文档确实没用这种用法,但是我本地环境下使用却没有问题,记得当时是从http://stackoverflow.com/questions/13030095/how-to-save-requests-python-cookies-to-a-file 抄的。
    保险起见我改成这样(https://github.com/mckelvin/doubanfm-cli-for-linux/commit/fd97b296c490c67fb358bf60868470492b8ffe98#L2R53 )了

    本地requests版本信息:
    requests - Python HTTP for Humans.
    INSTALLED: 0.14.0
    LATEST: 1.2.0
    mckelvin
        15
    mckelvin  
    OP
       2013-05-07 13:11:23 +08:00
    @gouera 抱歉还没来得及写说明文档,`bin/doubanfm`是个可执行的shell文件,你可以看一下它的源码,不应该用python运行它,它会去跑python脚本。
    可以通过:
    ./bin/doubanfm
    ./bin/doubanfm http://dou.bz/3cF5xh
    ./bin/doubanfm http://douban.fm/?start=1483511g2965g1002215&cid=1002215
    来运行。
    bingwenshi
        16
    bingwenshi  
       2013-05-07 13:21:21 +08:00
    (*^__^*) 嘻嘻…… 我来看看,PyQt可以跨平台的吧?
    VeryCB
        17
    VeryCB  
       2013-05-07 13:29:43 +08:00
    (*^__^*) 嘻嘻…… 我也来看看
    gouera
        18
    gouera  
       2013-05-07 14:12:16 +08:00
    @mckelvin
    wsl@wsl:~/Downloads$ ./doubanfm/bin/doubanfm
    ./doubanfm/bin/doubanfm: line 3: realpath: command not found
    dirname: missing operand
    Try `dirname --help' for more information.
    python: can't open file '/../src/main.py': [Errno 2] No such file or directory


    我能是不行,接,有文真不用。。。
    mckelvin
        19
    mckelvin  
    OP
       2013-05-07 14:51:37 +08:00
    @gouera 我在项目主页上补了一些文档。realpath 是 http://www.gnu.org/software/coreutils/ 里的,你的系统没有这个命令。我是在ArchLinux下开发的,,实在不行你就切换到src目录执行 python main.py
    lennyh
        20
    lennyh  
       2013-05-08 21:15:03 +08:00
    @yexiaoxing 俺现在想导出亦歌的收藏列表都不成功,RSS和分享都不行,不知API可用不?如果可用俺倒确实想试一试~~
    hh4062703
        21
    hh4062703  
       2013-05-08 21:28:33 +08:00
    先试试看
    yexiaoxing
        22
    yexiaoxing  
       2013-05-09 13:09:52 +08:00 via Android
    @lennyh twitter联系我吧
    lennyh
        23
    lennyh  
       2013-05-13 20:48:14 +08:00
    @yexiaoxing 呃,还没开始用那玩意,身边没人用,有其他的东西不?微博微信QQ啥的人比较多的工具。
    lovedboy
        24
    lovedboy  
       2013-05-13 22:55:24 +08:00
    yexiaoxing
        25
    yexiaoxing  
       2013-05-14 13:50:18 +08:00 via Android
    @lennyh 微博,同id
    reorx
        26
    reorx  
       2013-05-14 16:15:37 +08:00
    楼主有试过用 pyinstaller 之类的工具打包出单个可执行文件吗?我之前也做过一个 PyQt 的项目,代码只有几百行,打包后的文件却有十几M大,不知楼主是否遇到过相同的情况呢。
    manoon
        27
    manoon  
       2013-05-14 23:36:19 +08:00
    @reorx

    必须的。。。暂时也没找到解决方案。至少都会在10M以上。
    mckelvin
        28
    mckelvin  
    OP
       2013-05-14 23:38:40 +08:00
    @reorx 我并没试过打包,打包是Windows下使用考虑吗?虽然Qt跨平台,这个项目暂时不考虑兼容Windows,用这个项目估计也是Linux下的技术人员居多。

    我猜测可执行文件很大是因为把一些依赖的库也链接进可执行文件里了吧?

    我以前Windows下开发过Qt。在一台没有Qt环境的电脑上运行,需要mingwm10.dll、GtGui.dll等几个依赖文件和可执行文件放一个目录下,这几个依赖文件加起来就10多MB了。pyinstaller可能把它们都加进可执行文件里了。
    reorx
        29
    reorx  
       2013-05-15 02:07:26 +08:00
    @manoon
    @mckelvin 打包的确主要是为 windows 考虑的,当然也可以给 linux 用,我当时也是出于探究和实验的目的。情况和 mckelvin 猜测的是一样的,不仅各种 dll 库被链接进去,而且似乎整个 Python 和 PyQT 都被包含进去了 QAQ……

    就是这个小项目: https://github.com/reorx/stexplorer

    打包之后的 stexplorer.exe 大小: 13.8 MB

    看来果然就只在 linux 下用 PyQt 好了……
    hit9
        30
    hit9  
       2013-05-15 12:37:52 +08:00
    同样期待1g
    miniairports
        31
    miniairports  
       2013-05-17 10:52:18 +08:00
    使用./bin/doubanfm http://douban.fm/?start=181910g2440g0&cid=0 后这样了:

    No protocol specified
    main.py: cannot connect to X server :0

    已经安装了xorg。
    debian
    miniairports
        32
    miniairports  
       2013-05-17 11:01:04 +08:00
    发现是xserver对root的访问拒绝。普通用户就没问题,但是对douban_fm.log 没有访问权限,需要chmod一下
    xzl380
        33
    xzl380  
       2013-05-24 16:41:32 +08:00
    fork了。

    另外 发现了这个 KDoubanFM
    http://kde-apps.org/content/show.php/?cOntent=151477
    mckelvin
        34
    mckelvin  
    OP
       2013-05-24 23:59:56 +08:00
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2342 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is owered by solitude
    VERSION: 3.9.8.5 28ms UTC 15:49 PVG 23:49 LAX 07:49 JFK 10:49
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86