More links coming soon :)
Raycast API | Web Page |
---|---|
Effortlessly convert Spotify links to your preferred streaming service
Home Page: https://idonthavespotify.donado.co
More links coming soon :)
Raycast API | Web Page |
---|---|
Hi!
For the same reasons why I would like to convert a Spotify link into a non-Spotify one, I also frequently find myself wanting to convert a non-Spotify link into a Spotify one. Would it be possible to implement the inverse functionality? (As in, pasting an Apple Music link and getting in return a Spotify link to the same item.)
Thanks!
See if it is possible to use the API to get a music.youtube link instead of youtube videos
The mobile app returns links with another schema, e.g. https://spotify.link/Lh6MLTOo2Bb.
I tried to get this working myself but couldn't figure out how best to structure it in this kind of app.
Here's a failing test.
test('should return a song with a valid shortLink - Song', async ({ page }) => {
const shortLinkSong = 'https://spotify.link/Lh6MLTOo2Bb';
const searchCard = page.getByTestId('search-card');
await page.fill('#song-link', spotifyLinkSong);
await page.press('#song-link', 'Enter');
const searchCardText = await searchCard.textContent() ?? '';
expect(searchCardText).toContain('Do Not Disturb');
expect(searchCardText).toContain('Drake · Song · 2017');
expect(searchCardText).toContain('Listen on Youtube');
expect(searchCardText).toContain('Listen on Deezer');
expect(searchCardText).toContain('Listen on Apple Music');
expect(searchCardText).toContain('Listen on Tidal');
expect(searchCardText).toContain('Listen on SoundCloud');
const youtubeLink = await page.getByText('Listen on Youtube').getAttribute('href');
const deezerLink = await page.getByText('Listen on Deezer').getAttribute('href');
const appleMusicLink = await page.getByText('Listen on Apple Music').getAttribute('href');
const tidalLink = await page.getByText('Listen on Tidal').getAttribute('href');
const soundcloudLink = await page.getByText('Listen on SoundCloud').getAttribute('href');
expect(youtubeLink).toBe('https://www.youtube.com/watch?v=zhY_0DoQCQs');
expect(deezerLink).toBe('https://www.deezer.com/track/144572248');
expect(appleMusicLink).toBe('https://music.apple.com/us/album/do-not-disturb/1440890708?i=1440892237');
expect(tidalLink).toBe('https://listen.tidal.com/search?q=Do%20Not%20Disturb%20Drake');
expect(soundcloudLink).toBe('https://soundcloud.com/search/sounds?q=Do%20Not%20Disturb%20Drake');
});
The regex needs updating:
export const SPOTIFY_LINK_REGEX = /^https:\/\/(open\.spotify\.com\/(track|album|playlist|artist|episode|show)|spotify.link)\/.*$/;
Unfortunately, after that it's not as simple as updating the fetch call to fetch(spotifyLink, { redirect: 'follow' })
as it redirects to a page that tries to open the app or show a button with a link to the correct URL. (I would use a[href^=https://open.spotify.com
to get this)
This for the Web page, not Raycast Extension.
When pasting "S5E5 Framework Building with Ryan Carniato" link https://open.spotify.com/episode/5dNTXSZtkQLm6HuVdboFtx?si=40b29ad1f62742b5, The youtube link is incorrect, leads to ryan's "JavaScript Frameworks in 2023" https://www.youtube.com/watch?v=6RIPfwxj24s
Also I'd suggest not showing other platform links if they don't exist.
Tidal is currently on hold until the next version #10 (comment).
Amazon Music is a good candidate to be included in the next version.
Get only one result, WEB + API.
Web: Settings screen with services picker (include inverted search too)
API: search queryParam.
Tidal Official API is now available in beta https://developer.tidal.com/apiref
Seems to have everything needed to update adapters/tidal.ts
👀
The first Spotify request is failing, but it works after retrying 🤔
[10:17:17.822] ERROR (7): [Spotify Parser] (https://open.spotify.com/track/6LsUo3PX3QeJmWBRcmaf5b) CanceledError: canceled
2024-01-31T10:17:17.825210576Z app[web.1]: err: {
2024-01-31T10:17:17.825217336Z app[web.1]: "type": "Error",
2024-01-31T10:17:17.825222096Z app[web.1]: "message": "[Spotify Parser] (https://open.spotify.com/track/6LsUo3PX3QeJmWBRcmaf5b?si=cd59ba91cfa14d9a) CanceledError: canceled",
2024-01-31T10:17:17.825227096Z app[web.1]: "stack":
2024-01-31T10:17:17.825231176Z app[web.1]: Error: [Spotify Parser] (https://open.spotify.com/track/6LsUo3PX3QeJmWBRcmaf5b) CanceledError: canceled
2024-01-31T10:17:17.825235816Z app[web.1]: at <anonymous> (/usr/src/app/src/parsers/spotify.ts:73:62)
2024-01-31T10:17:17.825240056Z app[web.1]: at processTicksAndRejections (:12:39)
2024-01-31T10:17:17.825244016Z app[web.1]: "originalLine": 39,
2024-01-31T10:17:17.825247976Z app[web.1]: "originalColumn": 20
2024-01-31T10:17:17.825262736Z app[web.1]: }
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.