我试图使用PowerShell与Shazam进行交互,但它们的文档主要是用PHP编写的。我在Python的另一个论坛上找到了这个片段,据说是这样的:
from pydub import AudioSegment
import base64
import requests
import json
file_path="./test.raw"
url = "https://rapidapi.p.rapidapi.com/songs/detect"
encode_string = base64.b64encode(open(file_path, "rb").read())
payload=encode_string
print(type(payload))
headers = {
'content-type': "text/plain",
'x-rapidapi-key': "<<<your key>>>",
'x-rapidapi-host': "shazam.p.rapidapi.com"
}
response = requests.request("POST", url, data=payload, headers=headers)
print(json.dumps(json.loads(response.text)))从我发现的文档中,唯一与PowerShell相关的是这个小片段,但它似乎没有多大帮助:
$headers=@{}
$headers.Add("content-type", "multipart/form-data; boundary=---011000010111000001101001")
$headers.Add("X-RapidAPI-Host", "shazam-core.p.rapidapi.com")
$headers.Add("X-RapidAPI-Key", "<<<your key>>>")
$response = Invoke-WebRequest -Uri 'https://shazam-core.p.rapidapi.com/v1/tracks/recognize' -Method POST -Headers $headers -ContentType 'multipart/form-data; boundary=---011000010111000001101001' -Body '-----011000010111000001101001
Content-Disposition: form-data; name="file"
-----011000010111000001101001--
'我想像其他人在Python中那样做,但是我只需要帮助把它翻译成PowerShell。我已经找到了一种将音频文件转换为基64并将其缩短到500 it的方法,类似于他们所做的那样:
$Bytes = [System.IO.File]::ReadAllBytes("file.mp3") | select -First 500000
$EncodedText = [Convert]::ToBase64String($Bytes)我只需要知道如何使用Invoke-WebRequest格式化请求。
对于任何感兴趣的人,我正计划制作一个使用纯Shazam的歌曲标记器--它可能最终会在某个时候获得一个GUI,但我还没有决定到现在为止,一旦我能够摆脱这条道路,其他的一切都会变得非常顺利。
编辑:
在获得帮助之后,我最终从音频文件转到shazam输出:
$Track = "Thru the 7th with My Woadies.mp3"
$RAWTemp = $PSScriptRoot + "\Temp.pcm"
$SampleRateExpression = "(($PSScriptRoot\ffmpeg\bin\ffprobe.exe -loglevel 0 -print_format json -show_format -show_streams '$Track' | ConvertFrom-Json).streams).sample_rate"
$SampleRate = Invoke-expression $SampleRateExpression
$ConvertToRawExpression = "$PSScriptRoot\ffmpeg\bin\ffmpeg.exe -nostats -loglevel 0 -y -i '$Track' -acodec pcm_s16le -f s16le -ac 1 -ar $SampleRate '$RAWTemp'"
Invoke-expression $ConvertToRawExpression
$RawBytes = [System.IO.File]::ReadAllBytes($RAWTemp) | select -First 780000
$EncodedTracKSnippet = [Convert]::ToBase64String($RawBytes)
Remove-Item $RAWTemp
$url = 'https://shazam.p.rapidapi.com/songs/v2/detect'
$headers = @{
'X-RapidAPI-Host'='shazam.p.rapidapi.com';
'X-RapidAPI-Key'='<<<your key>>>'
}
$r = Invoke-WebRequest -Uri $url -UseBasicParsing -Method Post -Body $EncodedTrackSnippet -Headers $headers -ContentType 'text/plain'
$TrackBase = ($r.Content | ConvertFrom-Json).track
$ShazamTrackMetaData = New-Object -TypeName psobject
if (($TrackBase.title) -ne $null) { $ShazamTrackMetaData | Add-Member -MemberType NoteProperty -Name Title -Value $TrackBase.title; }
if (($TrackBase.subtitle) -ne $null) { $ShazamTrackMetaData | Add-Member -MemberType NoteProperty -Name Artist -Value $TrackBase.subtitle; }
if ((((($TrackBase).sections).metadata | Where-Object title -eq "Label").text) -ne $null) { $ShazamTrackMetaData | Add-Member -MemberType NoteProperty -Name Label -Value ((($TrackBase).sections).metadata | Where-Object title -eq "Label").text; }
if ((((($TrackBase).sections).metadata | Where-Object title -eq "Album").text) -ne $null) { $ShazamTrackMetaData | Add-Member -MemberType NoteProperty -Name Album -Value ((($TrackBase).sections).metadata | Where-Object title -eq "Album").text; }
if ((((($TrackBase).sections).metadata | Where-Object title -eq "Released").text) -ne $null) { $ShazamTrackMetaData | Add-Member -MemberType NoteProperty -Name Year -Value ((($TrackBase).sections).metadata | Where-Object title -eq "Released").text; }
if ((($TrackBase.genres).primary) -ne $null) { $ShazamTrackMetaData | Add-Member -MemberType NoteProperty -Name Genre -Value ($TrackBase.genres).primary; }
if (((($TrackBase).sections).text) -ne $null) { $ShazamTrackMetaData | Add-Member -MemberType NoteProperty -Name Lyrics -Value ((($TrackBase).sections).text); }
if ((($TrackBase.images).coverart) -ne $null) { $ShazamTrackMetaData | Add-Member -MemberType NoteProperty -Name CoverArt -Value ($TrackBase.images).coverart; }
$ShazamTrackMetaData | Format-list输出:
Title : Runnin' Thru The 7th With My Woadies
Artist : $UicideBoy$ & Pouya
Label : G59 Records
Album : $Outh $Ide $Uicide - EP
Year : 2015
Genre : Hip-Hop/Rap
Lyrics : {$null, View from a balcony, Pool lit up blue, Lawn chairs next to the ice chest...}
CoverArt : https://is3-ssl.mzstatic.com/image/thumb/Music115/v4/aa/87/11/aa871103-dba3-4797-4ccd-38e0a811bfe6/195497822997.jpg/400x400cc.jpg发布于 2022-04-17 05:05:55
他们在他们的API文档中有powershell示例,点击左边的Detectv2 >歌曲,然后从右边的下拉菜单中选择powershell
$Bytes = [System.IO.File]::ReadAllBytes("C:\Users\User\Downloads\clinteastwood_portion_mono.raw") #| select -First 500000
$EncodedText = [Convert]::ToBase64String($Bytes)
$url = 'https://shazam.p.rapidapi.com/songs/v2/detect'
$headers = @{
'X-RapidAPI-Host'='shazam.p.rapidapi.com';
'X-RapidAPI-Key'='<<<your key>>'
}
$r = Invoke-WebRequest -Uri $url -UseBasicParsing -Method Post -Body $EncodedText -Headers $headers -ContentType 'text/plain'https://stackoverflow.com/questions/71886559
复制相似问题