{ "info": { "author": "lihe", "author_email": "imanux@sina.com", "bugtrack_url": null, "classifiers": [ "Programming Language :: Python :: 3.7" ], "description": "---\ntitle: Sonimei\n---\n\n## Sonimei\n\nmusic downloader of [sonimei.cn](http://music.sonimei.cn/)\n\n> full supported in python3.7, macosx\n\n### Todo\n\n- [ ] ~~parse netease playlist and download all~~\n- [ ] add nosetests\n- [ ] maybe more other sites from sonimei\n\n### Sites supported\n\n- [x] qq\n- [x] 163(netease)\n- [x] kugou\n\n### Capability\n\n- [x] search of single song name/artist\n- [x] multiple songs `split by #`\n- [x] download and auto add ID3 tag:`cover`\n- [x] pagination supported\n- [x] scan directory and update ID3 tags\n- [x] check local file before search\n- [x] the search result: json/html raw file, auto cached, until you delete them\n- [x] the search candidates cached in the app lifecycle\n- [x] colorful ui :)\n\n#### new features\n\n- [x] auto cache downloaded album covers, until you manually delete them\n- [x] if you are listening NeteaseMusic, with `snm -a` will auto get the song's name and try download it, no need to copy/search anymore\n- [x] if the NeteaseMusic with High-Qulity `320Kbps`, will prompt to download it directly, but you can always skip it.\n- [x] if some song download failed, will store it, and with `snm -fs` you can re-download it again.\n\n### Install\n\n```bash\ncd /Sonimei-Music\npython setup.py install\n# reinstall\npip/3 uninstall sonimei -y && python setup.py instal\n```\n\n### sonime config/stored files/caches\n\n#### config\n\nconfig file: `~/.sonimei/sonimei.cfg`\n\n```python\n[log]\nenabled = false\nfile_pth = /Users/lihe/.sonimei/sonimei.log\nfile_backups = 3\nfile_size = 5\nlevel = 10\nsymbol = \u2630\u2637\u2633\u2634\u2635\u2632\u2636\u2631\n\n[pretty]\n# install hacknerd font for full chars\nsymbols = \uf13b \uf40b,\uf449,\uf661,\uf0dc,\uf162 \uf110,\uf469,\uf126,\uf7ae,\uf46f,\uf011,\uf633,\uf00d,\ufd16,\uf46d,\uf471,\uf40b,\uf1c0,\uf0ee,\uf1d9,\u266a,\n\n[snm]\nsave_dir = ~/Music/sonimei\n```\n\n#### songs\n\nedit config:`sonimei.cfg`\n\n#### caches\n\ncached raw: `~/.crawler/music.sonimei.cn/raw` \n\ncached covers: `~/.crawler/music.sonimei.cn/media`\n\ncached netease raw: `~/.crawler/music.163.com`\n\n### usage\n\nif installed `snm` can be called from terminal\n\n#### new feature\n\n##### A. `snm -a` will get current playing neteasemusic song, and try download\n\n##### B. `snm -fs` will found all download failed songs, and try re-download them.\n\n![auto-163-retry-failure](docs/images/auto-163-retry-failure.png)\n\n#### no params: `snm`\n\nif no params supplied, will show `-h` hints\n\n#### show help: `snm -h/--help`\n\n![help](docs/images/help.png)\n\n#### search single song/artist\n\n![search_n_b](docs/images/search_n_b.png)\n\n##### keys supported in search lifecycle\n\n`nN` load next page\n\n`pP` load previous page\n\n`bB` go back one layer\n\n`1~10` the number, will download the song\n\n`s` skip current song, if in scan mode\n\n#### choose site: -s 163/kugou \n\nbut now, both not available `I just use the sonimei site result`, I don't use 163/kugou, I prefer qq, so I just leave it here.\n\n![from_netease](docs/images/with_site_param.png)\n\n#### scan\n\nwill scan songs saved dir, and try to fix ID3 tags and cover\n\n![scan](docs/images/scan.png)\n\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/coghost/Sonimei-Music", "keywords": "sonimei,music downloader", "license": "GPL", "maintainer": "", "maintainer_email": "", "name": "sonimei", "package_url": "https://pypi.org/project/sonimei/", "platform": "", "project_url": "https://pypi.org/project/sonimei/", "project_urls": { "Bug Reports": "https://github.com/coghost/Sonimei-Music/issues", "Homepage": "https://github.com/coghost/Sonimei-Music", "Source": "https://github.com/coghost/Sonimei-Music" }, "release_url": "https://pypi.org/project/sonimei/0.1.8.1/", "requires_dist": [ "wget", "izen", "click", "logzero", "mutagen", "lxml", "requests", "selenium", "PyYAML" ], "requires_python": ">=3.7", "summary": "music downloader of music.sonimei.cn", "version": "0.1.8.1" }, "last_serial": 5430285, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "1878da697244c30d25017ed8861c44b7", "sha256": "d044b6f40466244b957d89a0f994c017856b6eb096b01447985748f63671d6b5" }, "downloads": -1, "filename": "sonimei-0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "1878da697244c30d25017ed8861c44b7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 21995, "upload_time": "2018-11-26T14:34:44", "url": "https://files.pythonhosted.org/packages/a5/22/b2753b90bd56f4b6089d473e0135adf117342b3d9e0a7096046f5cf3f8c5/sonimei-0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8a2b6714f8d3b393aba457a1f120f5df", "sha256": "8090f029f860484a8384f1696d7e8b261359bd92b7c60b034592adf7446f3945" }, "downloads": -1, "filename": "sonimei-0.1.tar.gz", "has_sig": false, "md5_digest": "8a2b6714f8d3b393aba457a1f120f5df", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7798, "upload_time": "2018-11-26T14:34:47", "url": "https://files.pythonhosted.org/packages/17/31/c81331276b6a0a7c8f386dba1f6549013e77c983a32355801a42018fbac6/sonimei-0.1.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "80962fa816eae1c9be5bba20f46b681f", "sha256": "76eba0e509b854849181f81168cfe2dc3c193e22501e6821200a446cb9e6dea0" }, "downloads": -1, "filename": "sonimei-0.1.4-py3-none-any.whl", "has_sig": false, "md5_digest": "80962fa816eae1c9be5bba20f46b681f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 22438, "upload_time": "2018-11-27T02:56:59", "url": "https://files.pythonhosted.org/packages/a3/8b/a7997e0d9f3cd22a8e52e67a18ff14be1d544f7556e32eb4d8b654feccc9/sonimei-0.1.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c93228d281b956c6e82b9df3ce9a3111", "sha256": "86838027ffd5f90ca2d0f8f7d27de55a14167b07810cdd090cce82ef0762df49" }, "downloads": -1, "filename": "sonimei-0.1.4.tar.gz", "has_sig": false, "md5_digest": "c93228d281b956c6e82b9df3ce9a3111", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8703, "upload_time": "2018-11-27T02:57:01", "url": "https://files.pythonhosted.org/packages/fb/30/90a1fd7a201ff6030d6f231d97c84c2618fddd4e2a6f34b9e5685f8bece0/sonimei-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "56485a1acd77f78da8f40cdc58909124", "sha256": "2dff52fd0432f1e15f008cce2f7d7a771d367faad840faaad52f6211a20d4c8c" }, "downloads": -1, "filename": "sonimei-0.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "56485a1acd77f78da8f40cdc58909124", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 22376, "upload_time": "2018-11-27T03:01:47", "url": "https://files.pythonhosted.org/packages/0f/7e/94b8c09b6762ccc0e12b9ba06554c931f7129d253a1a696aea077f61e252/sonimei-0.1.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "96a30676bbf080a9108719bc53fd113c", "sha256": "ed31edfc7077ccee868b0a0da33895ec4668e485d511c0cf7b807cb16b64a6a3" }, "downloads": -1, "filename": "sonimei-0.1.5.tar.gz", "has_sig": false, "md5_digest": "96a30676bbf080a9108719bc53fd113c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 8525, "upload_time": "2018-11-27T03:01:50", "url": "https://files.pythonhosted.org/packages/76/d1/00cc9520d7a32ea647234a62c89f0254daaea982b493aea55d118bc0a8ea/sonimei-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "3657852deb5db001e5e347be20bb6f16", "sha256": "779bdb7c7e320bce4fbe99dab34d7373d51bc1f8977a181f5e77a844e8d3c7f6" }, "downloads": -1, "filename": "sonimei-0.1.6-py3-none-any.whl", "has_sig": false, "md5_digest": "3657852deb5db001e5e347be20bb6f16", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 29455, "upload_time": "2019-06-19T14:20:24", "url": "https://files.pythonhosted.org/packages/72/c1/2e36b260e45381411f200d856f5a0394381af174c529d2a1c5925212f98c/sonimei-0.1.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "155fb153bebcdea45d2eee5c4d91ff88", "sha256": "149ea5ba9a753dba12c749b47bb56fab50049ec48313d8fdc95885056174acc6" }, "downloads": -1, "filename": "sonimei-0.1.6.tar.gz", "has_sig": false, "md5_digest": "155fb153bebcdea45d2eee5c4d91ff88", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 14939, "upload_time": "2019-06-19T14:20:26", "url": "https://files.pythonhosted.org/packages/44/23/e67ed522431948c5f675ff011c5e5add1b4f096dd9ea465d74ff3b4af714/sonimei-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "82dde79da100cfeb99bd14fb552b2095", "sha256": "be1c74c242da13ba9f7ee8a2e89e34c822278f513b7a15c7740d44112cec694e" }, "downloads": -1, "filename": "sonimei-0.1.7-py3-none-any.whl", "has_sig": false, "md5_digest": "82dde79da100cfeb99bd14fb552b2095", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 30979, "upload_time": "2019-06-20T14:07:35", "url": "https://files.pythonhosted.org/packages/d9/4d/0ecbac962a775d023a10e1e689646b6c98f853c92e641c9184822d4e5f3f/sonimei-0.1.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6262a354151c500c4ad2c1bac920acdd", "sha256": "181deb04d6ce34c1125d4e84b5f64874ecb8c2dd275d9a2f1073433b1bc34433" }, "downloads": -1, "filename": "sonimei-0.1.7.tar.gz", "has_sig": false, "md5_digest": "6262a354151c500c4ad2c1bac920acdd", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 16370, "upload_time": "2019-06-20T14:07:37", "url": "https://files.pythonhosted.org/packages/f5/87/c2ddf96d09e2157271b29270dbf75c99b1b4bcfe3e64e712df2f24fd5855/sonimei-0.1.7.tar.gz" } ], "0.1.8.1": [ { "comment_text": "", "digests": { "md5": "7b6d013ca066f126297bf5eec41a6fd4", "sha256": "d619bd3cc0a9b1308ff5b76af7ff858101970b17f00bf9eb695beb1a8f3ac350" }, "downloads": -1, "filename": "sonimei-0.1.8.1-py3-none-any.whl", "has_sig": false, "md5_digest": "7b6d013ca066f126297bf5eec41a6fd4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 31533, "upload_time": "2019-06-21T11:10:40", "url": "https://files.pythonhosted.org/packages/d8/c4/3a304164ea57b5deda7213cde1f576674590292f41fa57bd9372094bd5b3/sonimei-0.1.8.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8ac7fa47fa064a1f6575c55e1e42d6bc", "sha256": "28a938280403d94b2ade07eb0c9d8414727eab84b93b16707b6b2def74131e83" }, "downloads": -1, "filename": "sonimei-0.1.8.1.tar.gz", "has_sig": false, "md5_digest": "8ac7fa47fa064a1f6575c55e1e42d6bc", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 17298, "upload_time": "2019-06-21T11:10:42", "url": "https://files.pythonhosted.org/packages/4c/d9/e0a5c163079ae83a693f2e1dbd38c08a18dbc35c68fba3046dd61b65bfa1/sonimei-0.1.8.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "7b6d013ca066f126297bf5eec41a6fd4", "sha256": "d619bd3cc0a9b1308ff5b76af7ff858101970b17f00bf9eb695beb1a8f3ac350" }, "downloads": -1, "filename": "sonimei-0.1.8.1-py3-none-any.whl", "has_sig": false, "md5_digest": "7b6d013ca066f126297bf5eec41a6fd4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 31533, "upload_time": "2019-06-21T11:10:40", "url": "https://files.pythonhosted.org/packages/d8/c4/3a304164ea57b5deda7213cde1f576674590292f41fa57bd9372094bd5b3/sonimei-0.1.8.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8ac7fa47fa064a1f6575c55e1e42d6bc", "sha256": "28a938280403d94b2ade07eb0c9d8414727eab84b93b16707b6b2def74131e83" }, "downloads": -1, "filename": "sonimei-0.1.8.1.tar.gz", "has_sig": false, "md5_digest": "8ac7fa47fa064a1f6575c55e1e42d6bc", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 17298, "upload_time": "2019-06-21T11:10:42", "url": "https://files.pythonhosted.org/packages/4c/d9/e0a5c163079ae83a693f2e1dbd38c08a18dbc35c68fba3046dd61b65bfa1/sonimei-0.1.8.1.tar.gz" } ] }