{"id":30427226,"url":"https://github.com/s-frei/tracksearch","last_synced_at":"2025-08-22T14:03:17.873Z","repository":{"id":37958021,"uuid":"263129608","full_name":"s-frei/TrackSearch","owner":"s-frei","description":"Search on YouTube and/or SoundCloud for tracks and get their metadata","archived":false,"fork":false,"pushed_at":"2024-10-02T04:13:03.000Z","size":949,"stargazers_count":12,"open_issues_count":11,"forks_count":5,"subscribers_count":3,"default_branch":"develop","last_synced_at":"2025-07-04T20:21:10.610Z","etag":null,"topics":["expose","http-client","java","metadata-extraction","music","search","search-interface","song","soundcloud","stream","youtube"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/s-frei.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-05-11T18:51:23.000Z","updated_at":"2024-11-22T18:22:00.000Z","dependencies_parsed_at":"2024-03-26T17:27:27.540Z","dependency_job_id":"6c9d93ea-2ace-4006-9046-cf9e187460b8","html_url":"https://github.com/s-frei/TrackSearch","commit_stats":null,"previous_names":[],"tags_count":24,"template":false,"template_full_name":null,"purl":"pkg:github/s-frei/TrackSearch","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/s-frei%2FTrackSearch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/s-frei%2FTrackSearch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/s-frei%2FTrackSearch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/s-frei%2FTrackSearch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/s-frei","download_url":"https://codeload.github.com/s-frei/TrackSearch/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/s-frei%2FTrackSearch/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271650833,"owners_count":24796723,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-22T02:00:08.480Z","response_time":65,"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":["expose","http-client","java","metadata-extraction","music","search","search-interface","song","soundcloud","stream","youtube"],"created_at":"2025-08-22T14:01:45.403Z","updated_at":"2025-08-22T14:03:17.838Z","avatar_url":"https://github.com/s-frei.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!--suppress HtmlDeprecatedAttribute --\u003e\n\u003cdiv align=\"center\"\u003e\n  \u003cb\u003e\u003ch1\u003eTrackSearch\u003c/h1\u003e\u003c/b\u003e\u003cbr\u003e\n  \u003cp\u003e\n  \u003ca href=\"CONTRIBUTING.md\"\u003e\n    \u003cimg alt=\"Contributions welcome\" src=\"https://img.shields.io/badge/contributions-welcome-brightgreen\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\n    \u003cimg alt=\"License\" src=\"https://img.shields.io/github/license/s-frei/TrackSearch\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/s-frei/TrackSearch/releases\"\u003e \n    \u003cimg alt=\"GitHub release (latest by date)\" src=\"https://img.shields.io/github/v/release/s-frei/tracksearch\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://mvnrepository.com/artifact/io.sfrei/tracksearch\"\u003e \n    \u003cimg alt=\"Maven Central release\" src=\"https://img.shields.io/maven-central/v/io.sfrei/tracksearch\"\u003e\n  \u003c/a\u003e\n  \u003cbr\u003e\n  \u003ca href=\"https://github.com/s-frei/TrackSearch/actions/workflows/functionality-check.yml\"\u003e \n    \u003cimg alt=\"Functionality Test State\" src=\"https://github.com/s-frei/TrackSearch/actions/workflows/functionality-check.yml/badge.svg\"\u003e\n  \u003c/a\u003e\n\t\u003ca href=\"https://github.com/s-frei/TrackSearch/actions/workflows/maven-test.yml\"\u003e \n    \u003cimg alt=\"Latest\" src=\"https://github.com/s-frei/TrackSearch/actions/workflows/maven-test.yml/badge.svg\"\u003e\n  \u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n## What is it ?\n\n*TrackSearch* is for searching track metadata on different sources, like *YouTube* and *SoundCloud* for now.\n\n**Note:** TrackSearch isn't using any API-Key, it uses the public API (like your browser).\n\n## Supported sources\n\nSince TrackSearch focuses on searching for music (although YouTube offers more than music) \nI decided to add following providers for now:\n\n![youtube](https://img.shields.io/badge/-YouTube-FF0000?style=plastic\u0026logo=youtube\u0026logoColor=white)\n![soundcloud](https://img.shields.io/badge/-SoundCloud-FF3300?style=plastic\u0026logo=soundcloud\u0026logoColor=white)\n\nThere could be more added if there are interesting sources to go for.\n\n#### Current features :mag_right:\n\n- search\n- paging\n- multiple clients asynchronous\n- metadata like: duration, channel, views, thumbnail, ...\n\n## Stream\n\nWith release [1.0.0](https://github.com/s-frei/TrackSearch/releases/tag/1.0.0) the capability of getting all available\naudio formats and the actual stream URL was removed, as it takes too much effort to maintain it and there are other\n*huge* projects that offer that with a large community like [yt-dlp](https://github.com/yt-dlp/yt-dlp). \n\nTo get the stripped functionality back use e.g.:\n\n```shell\nyt-dlp -J \u003curl\u003e | jq '.formats | map(select(.vcodec == \"none\"))'\n```\n\nI decided against implementing a simple wrapper to bring back the stripped functionalities as usage will differ\nfrom user to user.\n\n## How to use it ? :books:\n\n### Dependency\n\n*TrackSearch* is available on [Maven Central](https://search.maven.org/artifact/io.sfrei/tracksearch):\n\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003eio.sfrei\u003c/groupId\u003e\n    \u003cartifactId\u003etracksearch\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n```kotlin\nimplementation(\"io.sfrei:tracksearch:1.0.0\")\n```\n\non [GitHub Packages](https://github.com/s-frei/TrackSearch/packages) or directly from \n[GitHub Releases](https://github.com/s-frei/TrackSearch/releases/latest).\n\n### Getting started\n\n```java\n// Client to search on all available sources asynchronous\nMultiTrackSearchClient searchClient = new MultiSearchClient();\n\n// Client for explicit source\nTrackSearchClient\u003cSoundCloudTrack\u003e explicitClient = new SoundCloudClient();\n\ntry {\n    TrackList\u003cTrack\u003e tracksForSearch = searchClient.getTracksForSearch(\"\u003cyour keywords\u003e\");\n    Track track = tracksForSearch.get(0);\n\n    final String url = track.getUrl();\n    final String title = track.getTitle();\n    final Duration duration = track.getDuration();\n\n    final TrackMetadata trackMetadata = track.getTrackMetadata();\n    final String channelName = trackMetadata.channelName();\n    final String channelUrl = trackMetadata.channelUrl();\n    final String thumbNailUrl = trackMetadata.thumbNailUrl();\n    final Long streamAmount = trackMetadata.streamAmount();\n\n    // Get next tracks page\n    TrackList\u003cTrack\u003e nextTracks = tracksForSearch.next();\n\n    // Get a track for URL\n    SoundCloudTrack trackForUrl = explicitClient.getTrack(\"\u003csoundcloud-url\u003e\");\n\n} catch (TrackSearchException e) {\n    // Damn\n}\n```\n\nFor more information check the related interface documentation or have a look into the \n[tests](https://github.com/s-frei/TrackSearch/blob/develop/src/test/java/io/sfrei/tracksearch/clients/ClientTest.java).\n\n## Why is this done ?\n\nI haven't found anything which is capable of doing this kind of stuff, except it offered something similar and could be\nabused for this, or it wasn't written in Java.\n\n## Develop :hammer:\n\n**Note:** **JDK 17** is required! (`sdk env install`)\n\nFire up following in your shell:\n\n#### Build\n\n```sh\n$ ./mvnw clean install\n```\n\n#### Test\n\nThe *simple* [test runs daily](https://github.com/s-frei/TrackSearch/actions) to get notified when something is not\nworking. Test it on your own:\n\n```sh\n$ ./mvnw test\n```\n\nFor detailed test (about ~250 tracks for each client):\n\n```sh\n$ ./mvnw test -P detailed-client-test\n```\n\n---\n\n## Contributing :handshake:\n\nFeel free to contribute! - [How?](https://github.com/s-frei/TrackSearch/blob/develop/CONTRIBUTING.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fs-frei%2Ftracksearch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fs-frei%2Ftracksearch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fs-frei%2Ftracksearch/lists"}