Git Product home page Git Product logo

spotify-readme's Introduction

Spotify Readme

Badge Badge Badge

A dynamic, customizable, and real-time Spotify now-playing widget for your README files that syncs with the song you’re currently playing. If you're not currently playing a song, it'll display one of your recent songs! Feel free to ask for help or make any PRs/issues/suggestions πŸ˜„

Previews

Default

/api

Preview

Spinning CD Effect

/api?spin=true

Preview

Include Scan Code

/api?scan=true

Preview

Rainbow Equalizer

/api?rainbow=true

Preview

Dark Theme

/api?theme=dark

Preview

Setup/Deployment

This will take approximately 5 minutes.

Note

This guide was last updated on Aug 30, 2023. The steps might differ slightly in the future if Spotify or Vercel updates their website interfaces.

0. Star This Repo (Mandatory) 🌟

  • Yes, this step is required.

1. Spotify's API 🎢

  • Head over to Spotify for Developers.
    • Accept the Terms of Service if necessary.
    • Verify your email address if you haven't done so already.
    • Click on the Create app button.
      • In the App name & App description fields, you may put whatever you want.
      • In the Redirect URI field, add http://localhost/callback/.
      • Agree with Spotify's TOS and click Save.
    • Click on the Settings button.
    • Take note of the Client ID & Client Secret.

2. Intermediary Steps πŸ› οΈ

https://accounts.spotify.com/authorize?client_id={CLIENT_ID}&response_type=code&scope=user-read-currently-playing,user-read-recently-played&redirect_uri=http://localhost/callback/
  • Copy and paste the above link into your browser.

    • Replace {CLIENT_ID} with the Client ID you got from your Spotify application.
    • Vist the URL.
      • Log in if you're not already signed in.
      • Click Agree.
  • After you get redirected to a blank page, retrieve the URL from your browser's URL bar. It should be in the following format: http://localhost/callback/?code={CODE}.

    • Take note of the {CODE} portion of the URL.
  • Head over to base64.io.

    • Create a string in the form of {CLIENT_ID}:{CLIENT_SECRET} and encode it to base 64.
    • Take note of the encoded Base64 string. We'll call this {BASE_64}.
  • If you're on Windows or don't have the curl command, head over to httpie.io/cli/run.

    • Press enter.
    • Clear the pre-filled command.
  • If you're on Linux or Mac with the curl command, open up your preferred terminal.

  • Run the following command (replace {BASE_64} and {CODE} with their respective values):

    curl \
      -X POST \
      -H "Content-Type: application/x-www-form-urlencoded" \
      -H "Authorization: Basic {BASE_64}" \
      -d "grant_type=authorization_code&redirect_uri=http://localhost/callback/&code={CODE}" \
      https://accounts.spotify.com/api/token
  • If you did everything correctly, you should get a response in the form of a JSON object.

    • Take note of the refresh_token's value. We'll call this {REFRESH_TOKEN}.

3. Host on Vercel πŸŒ€

  • Fork this repository.
  • Head over to Vercel and create an account if you don't already have one.
    • Add a new project.
      • Link your GitHub account if you haven't done so already.
      • Make sure Vercel has access to the forked respository.
      • Import the forked respository into your project.
        • Give it a meaningful project name.
        • Keep the default options for the other settings.
        • Add the following environment variables along with their appropriate values:
          • CLIENT_ID β‡’ {CLIENT_ID}.
          • CLIENT_SECRET β‡’ {CLIENT_SECRET}.
          • REFRESH_TOKEN β‡’ {REFRESH_TOKEN}.
        • Click Deploy.
        • Click Continue to Dashboard.
          • Find the Domains field and take note of the URL.
            • Example: {PROJECT_NAME}.vercel.app.

4. Add to your GitHub πŸš€

  • In any markdown file, add the following (replace {PROJECT_NAME} with the name you gave your Vercel project):

    <a href="https://github.com/tthn0/Spotify-Readme">
      <img src="https://{PROJECT_NAME}.vercel.app/api" alt="Current Spotify Song">
    </a>
  • Please leave the anchor tag hyperlink reference to this GitHub repo to retain creator credit and for other users to find!

Customization

To customize the widget, add query parameters to the endpoint. There are many possible combinations! See how it pairs with other widgets on my own README! (If you're on mobile and have a small screen, use a desktop browser or change the zoom level to zoom out.)

Parameter Default Values
spin false false, true
scan false false, true
theme light light, dark
rainbow false false, true

Keep Your Fork Up To Date

You can keep your fork, and thus your private Vercel instance up to date with the upstream using GitHub's Sync Fork button.

Note

This wasn't a completely original idea. This was inspired by novatorem's project that was supposed to be for me only. Since others have asked for the source code, I decided to make this a public repo. I also incorporated the latest two PR's from the orignal project into this one and made it easy to customize!

spotify-readme's People

Contributors

tthn0 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

spotify-readme's Issues

Images

Hey, the images that you provided in the README.md file are not loading. Can you please fix this issue so that users can see a preview of each Widget

image

Regards,
Zemerik

"error":"invalid_client"

Hello, I have an "error":"invalid_client" issue.
I did as it was written, created a string in the format
And encoded it in Base64
And sent a curl request

curl \
-X POST \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Authorization: Basic {YzM...REDACTED...MzM=}" \
-d "grant_type=authorization_code&redirect_uri=[http://localhost/callback/&code={AQDzjaRztvKyjHB5XuaMGgZO2XyBCygxqVs2lSFnBsMUyyTo-K2W_mV8uf4qKhmNfaSdtwZ5s3MkFNXvp3KpgueowjB6VCAiw2fkEC7QJdBAJDrOnrwUQBzl3kODDUox8fX8fnsB-P6e5-9JKjL-SfPp7GzQxhHUNqilOasGO8TwBaPsv36vFxeswv2Tm6dft4LI0MMTYLmQ7c_stIF6QfSZElbpy2nJpVI5gQL8}](http://localhost/callback/&code=%7BAQDzjaRztvKyjHB5XuaMGgZO2XyBCygxqVs2lSFnBsMUyyTo-K2W_mV8uf4qKhmNfaSdtwZ5s3MkFNXvp3KpgueowjB6VCAiw2fkEC7QJdBAJDrOnrwUQBzl3kODDUox8fX8fnsB-P6e5-9JKjL-SfPp7GzQxhHUNqilOasGO8TwBaPsv36vFxeswv2Tm6dft4LI0MMTYLmQ7c_stIF6QfSZElbpy2nJpVI5gQL8%7D)" \
https://accounts.spotify.com/api/token

and received the error response "error":"invalid_client"

404 error when deploying

Screenshot 2023-08-14 at 1 16 48 PM

After deploying on Vercel I see this error.

I tried revising my vercel.json to be this:

{
  "rewrites": [
    { "source": "/(.*)", "destination": "/" }
  ],
  "headers": [
    {
      "source": "/api/(.*)",
      "headers": [
        { "key": "Access-Control-Allow-Credentials", "value": "true" },
        { "key": "Access-Control-Allow-Origin", "value": "*" },
        { "key": "Access-Control-Allow-Methods", "value": "GET,OPTIONS,PATCH,DELETE,POST,PUT" },
        { "key": "Access-Control-Allow-Headers", "value": "X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version" }
      ]
    }
  ]
}
 

That didn't work.

Any tips are greatly appreciated.

caching access tokens

the access token have a lifetime of 3600s, so why not cache them rather than creating new access tokens at every request?

[Request] Auto refresh on next song

Hello dev!

First of all, thank you for this project that looks and run great. I have an enhancement request : the card would auto refresh on song change so it always display the current played song.

404 error

image

i have this error trying to acess mu vernel app

dark theme

can you make available rainbow equalizer for dark theme too?

help

I'm going to do the tutorial you say but it appears "invalid client"

Getting HTTP error code 500 after deployment

[ERROR] Runtime.ImportModuleError: Unable to import module 'vc__handler__python': cannot import name 'url_quote' from 'werkzeug.urls' (/var/task/werkzeug/urls.py) Traceback (most recent call last):

Status Code: 500 Internal Server Error
Host: spotify-readme-gamma-bay.vercel.app
Request Path: /api
Request ID: 9tr5s-1709187115156-2eb1a61308cf
Request User Agent: github-camo (723732d2)
Level: Error

Vercel functions crash

Hi, I deployed the repo on vercel and when i'm going on the endpoint /api i get this error

image
image

Interesting issue with svg load on hover in Firefox

I've had this weird, weird bug and I thought I'd bring it up as I can't find any details about it anywhere else.

I've forked your repo and made some simplifications/style edits. But perhaps somewhere along the way, I made a change I shouldn't have (?). I'm currently experiencing an odd bug where the cover of the base64 encoded cover art will only load when the mouse hovers over it.

When this happens it appears instantly, suggesting this isn't an issue with the resource being loaded on the page but something about how the svg is rendered on the page. I only experience this issue with Firefox and I can't always reproduce it. My gut tells me it might be something to do with the Vercel instance going dormant when it's not been activated in a while and so the svg isn't loaded at once with the cover image?

Here is a short little screen recording so you can get the idea.

Screen.Recording.2022-06-28.at.10.08.35.PM.mov

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.