{ "info": { "author": "Javier Santacruz", "author_email": "javier.santacruz.lc@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7" ], "description": "mp3hash\n=======\n\nHashes music files ignoring meta-data.\n\nUseful to detect the same song in different tagged files.\n\nThe following metadata standards are supported:\n\n::\n\n id3v1, id3v1 extended, id3v2.2, id3v2.3 and id3v.24\n\nJavier Santacruz (2012-2013)\n\nCommand line usage\n==================\n\nSimilarly to ``sha1sum`` or ``md5sum``, it takes one or more files and\nreturns the hashes, in this way:\n\n::\n\n $ ./mp3hash *.mp3\n 6611bc5b01a2fc6a6386a871e8c51f86e1f12b33 13_Hotel-California-(Gipsy-Kings).mp3\n 6611bc5b01a2fc6a6386a871e8c51f86e1f12b33 14_Hotel-California-(Gipsy-Kings).mp3\n\nIt returns the same hash number, even though the tags are different, and\nso their regular hashes:\n\n::\n\n $ sha1sum *.mp3\n 6a1d5f8317add10e205ae30174630b47645fb5b4 13_Hotel-California-(Gipsy-Kings).mp3\n c28d6976114d31df3366d9935eb0bedd36cf1f0b 14_Hotel-California-(Gipsy-Kings).mp3\n\nThe hash it's made strictly using the music data in the file, by\ncalculating the tags sizes and omitting them.\n\nThe default hashing algorithm is ``sha-1``, but any algorithm can be\nused as long it's supported by the Python's ``hashlib`` module. A\ncomplete list of all available hashing algorithms can be obtained by\ncalling the program with the ``--list-algorithms``.\n\n::\n\n $ ./mp3hash --list-algorithms\n md5\n sha1\n sha224\n sha256\n sha384\n sha512\n\n ./mp3hash --algorithm md5\n ac0fdd89454528d3fbdb19942a2e6653 13_Hotel-California-(Gipsy-Kings).mp3\n ac0fdd89454528d3fbdb19942a2e6653 14_Hotel-California-(Gipsy-Kings).mp3\n\nInstallation\n============\n\nIt doesn't have any dependences besides ``python2.7+``. In order to\naccess to the ``mp3hash`` script, the package should be installed.\n\n::\n\n python setup.py install\n\nAnd the ``mp3hash`` command should be available in path.\n\nAPI\n===\n\nThe main components are the mp3hash function and the TaggedFile class.\n\n- mp3hash will compute the hash on the music (and only the music) of\n the file in the given path.\n\n from mp3hash import mp3hash mp3hash('/path/to/song.mp3') Out:\n 6611bc5b01a2fc6a6386a871e8c51f86e1f12b33\n\n- TaggedFile class takes a file-like object supporting seek and\n negative values for seek and will parse all the sizes for the\n metadata stored within it.\n\n from mp3hash import TaggedFile with open('/path/to/song.mp3')\n as file: TaggedFile(file).has\\_id3v2 Out: True\n\nDevelopers, developers, developers!\n===================================\n\nTesting environment\n-------------------\n\nYou're adviced to use a virtualenv\n\n::\n\n $ virtualenv --python python2 --distribute env\n $ . env/bin/activate\n\nOnce into the virtualenv, install the package and the testing\ndependences.\n\n::\n\n $(env) python setup.py develop\n $(env) pip install -r dev-reqs.txt\n\nIn order to perform the testing, run 'nosetests' from the root of the\nproject (same dir of setup.py).\n\n::\n\n $ nosetests\n\nAbout id3v1\n-----------\n\n- id3v1 is 128 bytes at the end of the file starting with 'TAG'\n- id3v1 extended is 227 bytes before regular id3v1 tag starting with\n 'TAG+'\n\ntotal size: 128 + (227 if extended)\n\nid3v1 is 128 bytes at the end of the file starting with 'TAG' id3v1\nextended is 227 bytes before regular id3v1 tag starting with 'TAG+'\n\ntotal size: 128 + (227 if extended)\n\nAbout id3v2\n-----------\n\nid3v2 has a 10 bytes header at the begining of the file. byte 5 holds\nflags. 4th bit indicates presence of footer in v2.4 bytes 6-10 are the\ntag size (not counting header)\n\ntotal size: header + tagsize + footer (if any)\n\nBased on id3v1 wikipedia docs: http://en.wikipedia.org/wiki/ID3 Based on\nid3v2 docs:\n\n- http://id3.org/id3v2-00\n- http://www.id3.org/id3v2.3.0\n- http://id3.org/id3v2.4.0-structure", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/jvrsantacruz/mp3hash", "keywords": null, "license": "UNKNOWN", "maintainer": null, "maintainer_email": null, "name": "mp3hash", "package_url": "https://pypi.org/project/mp3hash/", "platform": "Any", "project_url": "https://pypi.org/project/mp3hash/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://github.com/jvrsantacruz/mp3hash" }, "release_url": "https://pypi.org/project/mp3hash/0.1/", "requires_dist": null, "requires_python": null, "summary": "Music file hasher", "version": "0.1" }, "last_serial": 795022, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "65bf52562fdd061fab7ed17143b3e2ae", "sha256": "0b1193bcd88a22f81db43ee95181b4fbf857bf035fbfdffa646f4fc9efe0272c" }, "downloads": -1, "filename": "mp3hash-0.0.1.tar.gz", "has_sig": false, "md5_digest": "65bf52562fdd061fab7ed17143b3e2ae", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4084, "upload_time": "2013-03-17T19:39:35", "url": "https://files.pythonhosted.org/packages/9b/48/4dcfa2dea02fa45917a12cbf71d408f26fbe80f7d8b1bba08573dcc166a2/mp3hash-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "dfd3f400a5609acaa185845e8f038baa", "sha256": "b2953d0fc3ea7fe32e1423705a14948aaa870a62fa42a68607aef457f52224dd" }, "downloads": -1, "filename": "mp3hash-0.0.2.tar.gz", "has_sig": false, "md5_digest": "dfd3f400a5609acaa185845e8f038baa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4266, "upload_time": "2013-03-17T19:52:14", "url": "https://files.pythonhosted.org/packages/67/c1/cbaf959701319be2f666b3f8d1cff66fe7b64e97526bf055141c6db56f5d/mp3hash-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "6ed18ee37ab24f99f1704d3e7f7a043b", "sha256": "56a0079df4161fb62b4809e7a49ad273b88d0a4cd4aa50766ad2b76447adff2b" }, "downloads": -1, "filename": "mp3hash-0.0.3.tar.gz", "has_sig": false, "md5_digest": "6ed18ee37ab24f99f1704d3e7f7a043b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4497, "upload_time": "2013-03-17T19:56:52", "url": "https://files.pythonhosted.org/packages/f0/c9/a874e216450f807bf4f2c84c93b817ef37535c276074815d54c2a45450a0/mp3hash-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "a3e84ac42d4734dee97778ad6810da8b", "sha256": "db0457969cb0cf60e9a7b068f66ac8f1df3733a86880512199c89ed704a8c8f4" }, "downloads": -1, "filename": "mp3hash-0.0.4.tar.gz", "has_sig": false, "md5_digest": "a3e84ac42d4734dee97778ad6810da8b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4494, "upload_time": "2013-03-17T20:02:44", "url": "https://files.pythonhosted.org/packages/40/67/5cbe4e017297b8ccb8105474b95a0551a9395d2ca762d845ba9b65d34ce3/mp3hash-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "9892cb5449e24386866e06612cfe5975", "sha256": "7d95d91ac596f6254e77e5e281a04176ae1111c63925d4fe9fa72244dec0b14f" }, "downloads": -1, "filename": "mp3hash-0.0.5.tar.gz", "has_sig": false, "md5_digest": "9892cb5449e24386866e06612cfe5975", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4498, "upload_time": "2013-04-07T18:42:05", "url": "https://files.pythonhosted.org/packages/e9/d7/219a206ef24302b09b6c0dcebdd19e6a909f1970ada58044e0c5845a52a0/mp3hash-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "6424d03468a269a0e0cd5c7aa97c5760", "sha256": "023ed5680d723ecf59fbbf033031c1ba7d63c9ad99f8614a5b36d7717657f2fe" }, "downloads": -1, "filename": "mp3hash-0.0.6.tar.gz", "has_sig": false, "md5_digest": "6424d03468a269a0e0cd5c7aa97c5760", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6385, "upload_time": "2013-04-10T22:03:21", "url": "https://files.pythonhosted.org/packages/5b/1b/fb74723ad61147be07b07fc6691533383c84a84bcd493c6d3b286ff5be0a/mp3hash-0.0.6.tar.gz" } ], "0.1": [ { "comment_text": "", "digests": { "md5": "e85c1590a36e9de092754cc4ce855047", "sha256": "255d9703907523bec6b2d24eb27361e11a070ef5810e88f5c82fc84d740d7a9c" }, "downloads": -1, "filename": "mp3hash-0.1.tar.gz", "has_sig": false, "md5_digest": "e85c1590a36e9de092754cc4ce855047", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9706, "upload_time": "2013-04-15T19:15:24", "url": "https://files.pythonhosted.org/packages/42/56/2e68d06d3f8973dd0b3a3a4e676bd48926ff457aaedc96c37aeb57d82ef3/mp3hash-0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "e85c1590a36e9de092754cc4ce855047", "sha256": "255d9703907523bec6b2d24eb27361e11a070ef5810e88f5c82fc84d740d7a9c" }, "downloads": -1, "filename": "mp3hash-0.1.tar.gz", "has_sig": false, "md5_digest": "e85c1590a36e9de092754cc4ce855047", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9706, "upload_time": "2013-04-15T19:15:24", "url": "https://files.pythonhosted.org/packages/42/56/2e68d06d3f8973dd0b3a3a4e676bd48926ff457aaedc96c37aeb57d82ef3/mp3hash-0.1.tar.gz" } ] }