{"id":15008878,"url":"https://github.com/simon-weber/gmusicapi","last_synced_at":"2026-10-19T08:06:35.159Z","repository":{"id":2271509,"uuid":"3228110","full_name":"simon-weber/gmusicapi","owner":"simon-weber","description":"An unofficial client library for Google Music.","archived":true,"fork":false,"pushed_at":"2020-12-26T18:14:42.000Z","size":4143,"stargazers_count":2455,"open_issues_count":61,"forks_count":245,"subscribers_count":1,"default_branch":"develop","last_synced_at":"2026-10-15T01:19:30.048Z","etag":null,"topics":["client-lib","gmusicapi","google","google-music","python","python-2","python-3"],"latest_commit_sha":null,"homepage":"https://unofficial-google-music-api.readthedocs.io","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/simon-weber.png","metadata":{"files":{"readme":"README.rst","changelog":"HISTORY.rst","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-01-20T17:19:12.000Z","updated_at":"2026-10-01T16:55:36.000Z","dependencies_parsed_at":"2022-07-14T08:18:14.198Z","dependency_job_id":null,"html_url":"https://github.com/simon-weber/gmusicapi","commit_stats":null,"previous_names":[],"tags_count":44,"template":false,"template_full_name":null,"purl":"pkg:github/simon-weber/gmusicapi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simon-weber%2Fgmusicapi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simon-weber%2Fgmusicapi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simon-weber%2Fgmusicapi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simon-weber%2Fgmusicapi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/simon-weber","download_url":"https://codeload.github.com/simon-weber/gmusicapi/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simon-weber%2Fgmusicapi/sbom","scorecard":{"id":824572,"data":{"date":"2025-08-11","repo":{"name":"github.com/simon-weber/gmusicapi","commit":"5cb3aa3d17f6978e2e15220289daee2b0ceafe44"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.3,"checks":[{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"project is archived","details":["Warn: Repository is archived."],"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":4,"reason":"Found 4/10 approved changesets -- score normalized to 4","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: BSD 3-Clause \"New\" or \"Revised\" License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'develop'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 24 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"14 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2021-16 / GHSA-93xj-8mrv-444m","Warn: Project is vulnerable to: PYSEC-2020-46 / GHSA-gg84-qgv9-w4pq","Warn: Project is vulnerable to: GHSA-q48q-77qv-cf9p","Warn: Project is vulnerable to: PYSEC-2023-108 / GHSA-x456-3ccm-m6j4","Warn: Project is vulnerable to: PYSEC-2022-48 / GHSA-77rm-9x9h-xj3g","Warn: Project is vulnerable to: GHSA-8gq9-2x98-w8hf","Warn: Project is vulnerable to: GHSA-8qvm-5x2c-j2w7","Warn: Project is vulnerable to: PYSEC-2017-65 / GHSA-jwvw-v7c5-m82h","Warn: Project is vulnerable to: PYSEC-2024-3 / GHSA-j225-cvw7-qrx7","Warn: Project is vulnerable to: GHSA-9hjg-9r4m-mvj7","Warn: Project is vulnerable to: GHSA-9wx4-h78v-vm56","Warn: Project is vulnerable to: PYSEC-2023-74 / GHSA-j8r2-6x86-q33q","Warn: Project is vulnerable to: PYSEC-2020-99 / GHSA-537h-rv9q-vvph","Warn: Project is vulnerable to: PYSEC-2020-100 / GHSA-xrx6-fmxq-rjj2"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-23T16:23:09.465Z","repository_id":2271509,"created_at":"2025-08-23T16:23:09.465Z","updated_at":"2025-08-23T16:23:09.465Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":344872684,"owners_count":38351746,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-19T02:00:06.414Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["client-lib","gmusicapi","google","google-music","python","python-2","python-3"],"created_at":"2024-09-24T19:21:17.399Z","updated_at":"2026-10-19T08:06:34.716Z","avatar_url":"https://github.com/simon-weber.png","language":"Python","funding_links":[],"categories":["Web"],"sub_categories":["HTTP and Networking Clients"],"readme":"gmusicapi: an unofficial API for Google Play Music\n==================================================\n\ngmusicapi allows control of\n`Google Music \u003chttp://music.google.com\u003e`__ with Python.\n\n.. code-block:: python\n\n    from gmusicapi import Mobileclient\n    \n    api = Mobileclient()\n    # after running api.perform_oauth() once:\n    api.oauth_login('\u003ca previously-registered device id\u003e')\n    # =\u003e True\n    \n    library = api.get_all_songs()\n    sweet_track_ids = [track['id'] for track in library\n                       if track['artist'] == 'The Cat Empire']\n    \n    playlist_id = api.create_playlist('Rad muzak')\n    api.add_songs_to_playlist(playlist_id, sweet_track_ids)\n    \n**gmusicapi is not supported nor endorsed by Google.**\n\nThat said, it's actively maintained, and powers a bunch of cool projects:\n\n-  alternate clients, including\n   `one designed for the visually impaired \u003chttps://github.com/chrisnorman7/gmp3\u003e`__,\n   `a web-based jukebox which ships with its own server \u003chttps://github.com/chrisnorman7/jukebox\u003e`__,\n   `command line \u003chttps://github.com/christopher-dg/pmcli\u003e`__\n   `clients \u003chttps://github.com/and3rson/clay\u003e`__,\n   `a FUSE filesystem \u003chttps://github.com/EnigmaCurry/GMusicFS\u003e`__,\n   and `an Alexa skill \u003chttps://github.com/stevenleeg/geemusic\u003e`__\n-  library management tools for\n   `syncing tracks \u003chttps://github.com/thebigmunch/gmusicapi-scripts\u003e`__,\n   `syncing playlists \u003chttps://github.com/soulfx/gmusic-playlist\u003e`__,\n   and `migrating to a different account \u003chttps://github.com/brettcoburn/gmusic-migrate\u003e`__\n-  proxies for media players, such as\n   `gmusicproxy \u003chttps://github.com/gmusicproxy/gmusicproxy\u003e`__ and\n   `gmusicprocurator \u003chttps://github.com/malept/gmusicprocurator\u003e`__,\n   as well as plugins for \n   `Mopidy \u003chttps://github.com/hechtus/mopidy-gmusic\u003e`__,\n   `Squeezebox \u003chttps://github.com/squeezebox-googlemusic/squeezebox-googlemusic\u003e`__ and\n   `Tizonia \u003chttps://github.com/tizonia/tizonia-openmax-il\u003e`__.\n-  enhancements like `autoplaylists / smart playlists \u003chttps://autoplaylists.simon.codes\u003e`__\n\n\nGetting started\n---------------\nStart with `the usage docs \u003chttp://unofficial-google-music-api.readthedocs.io/en/latest/usage.html#usage\u003e`__, which will guide you through installation and the available apis.\n\nOnce you're up and running, you can explore the rest of the docs at http://unofficial-google-music-api.readthedocs.io.\n\nIf the documentation doesn't answer your questions, or you just want to get\nin touch, either `drop by #gmusicapi on Freenode\n\u003chttp://webchat.freenode.net/?channels=gmusicapi\u003e`__ or shoot me an email.\n\nStatus and updates\n------------------\n\n|build_status|\n\n.. |build_status| image:: https://travis-ci.org/simon-weber/gmusicapi.png?branch=develop\n        :target: https://travis-ci.org/simon-weber/gmusicapi\n\n* January 2020: Python 2 support dropped.\n* November 2018: proper OAuth support for the mobileclient.\n* February 2016: Python 3 support!\n* September 2015: Google switched to a new music uploading endpoint, breaking uploading for outdated versions of gmusicapi.\n* June 2015: Full mobileclient and webclient functionality was restored.\n* May 2015: Limited mobileclient functionality was restored.\n* April 2015: Google deprecated clientlogin, breaking both the webclient and mobileclient.\n* November 2013: I started working fulltime at Venmo, meaning this project is back to night and weekend development.\n\nFor fine-grained development updates, follow me on Twitter:\n`@simonmweber \u003chttps://twitter.com/simonmweber\u003e`__.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimon-weber%2Fgmusicapi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsimon-weber%2Fgmusicapi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimon-weber%2Fgmusicapi/lists"}