X-Git-Url: https://njoseph.me/gitweb/nimcoon.git/blobdiff_plain/9ed70b9e0ee8ebf8e0b1fc1bbe1b77178d1f008c..5f9cdfeff96bb2848e3dc72bab410859d78b9c65:/src/youtube.nim diff --git a/src/youtube.nim b/src/youtube.nim index 3457062..a83e233 100644 --- a/src/youtube.nim +++ b/src/youtube.nim @@ -2,6 +2,7 @@ import httpClient, json, strformat, + strutils, uri import @@ -10,13 +11,17 @@ import discard """ -Using Invidious API to retrieve the search results but playing the results directly from YouTube. -API reference: -https://github.com/iv-org/documentation/blob/master/API.md#get-apiv1search +Invidious API reference: +https://github.com/iv-org/documentation/blob/master/API.md """ +func makeUrl(videoId: string): string = + "https://www.youtube.com/watch?v=" & videoId + + proc getSearchResults*(searchQuery: string): SearchResults = + # Using Invidious API to retrieve the search results but playing the results directly from YouTube. let queryParam = encodeUrl(searchQuery) let client = newHttpClient() let response = get(client, &"{invidiousInstance}/api/v1/search?q={queryParam}") @@ -24,8 +29,17 @@ proc getSearchResults*(searchQuery: string): SearchResults = var searchResults: SearchResults = @[] for item in jsonData: if item["type"].getStr() == "video": - searchResults.add((item["title"].getStr(), "https://www.youtube.com/watch?v=" & item["videoId"].getStr())) + searchResults.add((item["title"].getStr(), makeUrl(item["videoId"].getStr()))) elif item["type"].getStr() == "playlist": - searchResults.add((item["title"].getStr(), "https://www.youtube.com/watch?v=" & item["playlistId"].getStr())) + searchResults.add((item["title"].getStr(), makeUrl(item["playlistId"].getStr()))) # Not handling type = channel for now searchResults + +proc getAutoPlayVideo*(searchResult: SearchResult): SearchResult = + # Take a search result and fetch its first recommendation + let videoId = searchResult.url.split("=")[1] + let client = newHttpClient() + let response = get(client, &"{invidiousInstance}/api/v1/videos/{videoId}") + let jsonData = parseJson($response.body) + let firstRecommendation = jsonData["recommendedVideos"][0] + (firstRecommendation["title"].getStr(), makeUrl(firstRecommendation["videoId"].getStr()))