{"id":16589501,"url":"https://github.com/rnons/hadourex","last_synced_at":"2025-10-29T09:31:57.496Z","repository":{"id":5310155,"uuid":"6492052","full_name":"rnons/HadouRex","owner":"rnons","description":"douban.fm CLI client in Haskell. You might be interested in https://github.com/rnons/lord","archived":false,"fork":false,"pushed_at":"2013-06-24T10:22:34.000Z","size":514,"stargazers_count":31,"open_issues_count":0,"forks_count":4,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-02-02T00:31:52.732Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"evgeny-gridasov/openvpn-otp","license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rnons.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-11-01T15:33:58.000Z","updated_at":"2020-09-20T15:59:32.000Z","dependencies_parsed_at":"2022-09-13T00:31:00.584Z","dependency_job_id":null,"html_url":"https://github.com/rnons/HadouRex","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rnons%2FHadouRex","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rnons%2FHadouRex/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rnons%2FHadouRex/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rnons%2FHadouRex/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rnons","download_url":"https://codeload.github.com/rnons/HadouRex/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238803259,"owners_count":19533282,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-11T23:09:02.431Z","updated_at":"2025-10-29T09:31:52.214Z","avatar_url":"https://github.com/rnons.png","language":"Haskell","funding_links":[],"categories":[],"sub_categories":[],"readme":"## 库\n\n**doubanfm.hs**是doubanfm api的haskell封装。目前还不具备登录功能。\n\n    cd doubanfm.hs\n    cabal install\n\n## 播放器\n\n**HadouRex**是doubanfm的CLI客户端，后端调用[mpg123]进行播放。因此，除了cabal install还需要另外安装mpg123。 \n\nHadouRex的代码参考了[hmp3]和[exaile-doubanfm-plugin]。\n\n### 安装\n\n    cd HadouRex\n    cabal install\n\n名为 **dourex** 的可执行文件会被安装到 *.~/.cabal/bin* 。\n\n### 选项\n\n\u003cpre\u003e\ndourex\ndourex listen [cid/artist]\ndourex search keywords\ndourex hot\ndourex trending\ndourex mark cid\ndourex unmark cid\ndourex marks\n\u003c/pre\u003e\n\ndourex的选项模仿了包管理器。用`dourex hot`和`dourex trending`查看热门和上升最快的兆赫。用`dourex search`搜索兆赫。 \n\n**注意**: dourex listen 后面接的参数，既可以是电台id，也可以是歌手/乐队名。如\n\n    dourex listen 1002316\n    dourex listen \"sigur ros\"\n\ndourex播放时，可以按`h`键查看快捷键。\n\n## 几个可以改进的地方\n\n1. 增加登录功能，可以参考[fmd]\n2. 作为一种练习，用[aeson]代替[json]库进行JSON的解析。aeson的口碑似乎比较好\n3. 作为一种练习，用[http-conduit]代替[HTTP]进行http请求\n4. 用[mpd]代替mpg123进行音乐播放\n5. 用`putMVar`和`getMVar`机制，代替`mpg123wait`函数，可以参考[jinkell]\n6. 增加歌词，可以考虑[geci.me]\n7. 用[optparse-applicative]进行选项(listen，hot等)的解析。\n\n这几个方面我或多或少知道怎么去实现，不过暂时没有时间去做。 \n\n有兴趣的同学可以进行尝试，重要的是有兴趣，不会的地方可以找我探讨(irc #haskell-cn)。  \n\n或者如果你想到其它可以改进的地方，也欢迎告诉我。\n\n\n----\n[hmp3]: http://hackage.haskell.org/package/hmp3\n[mpg123]: http://www.mpg123.de/\n[aeson]: http://hackage.haskell.org/package/aeson\n[json]: http://hackage.haskell.org/package/json\n[http-conduit]: hackage.haskell.org/package/http-conduit\n[HTTP]: http://hackage.haskell.org/package/HTTP\n[fmd]: https://github.com/hzqtc/fmd\n[jinkell]: https://github.com/rnons/jinkell\n[geci.me]: https://github.com/solos/geci.me-api\n[exaile-doubanfm-plugin]: https://github.com/sunng87/exaile-doubanfm-plugin\n[optparse-applicative]: http://hackage.haskell.org/package/optparse-applicative\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frnons%2Fhadourex","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frnons%2Fhadourex","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frnons%2Fhadourex/lists"}