#include "md5.bi"
#include "crt.bi"
#include "wshelper.bas"
Function MD5str (chars As String) As String
Dim md5hex As ZString * 32
Dim digest As ZString * 16
Dim state As md5_state_s
Dim i As Integer
md5_init(@state)
md5_append(@state, Cast(md5_byte_t Ptr, StrPtr(chars)), Len(chars))
md5_finish(@state, @digest)
For i = 0 To 15
sprintf(@md5hex _
+ (i * 2), _
"%02x", _
digest[i])
Next
Return md5hex
End Function
Function percent_encode(message As String) As String
Dim ret As String
Dim i As Integer
For i = 0 to Len(message) - 1
Select Case(message[i])
Case &h20 To &h2c, &h2f, &h3a, &h3b, &h3d, &h3f, &h40, &h5b, &h5d, &h80 to &hff
ret &= "%" & Hex(message[i])
Case Else
ret &= Chr(message[i])
End Select
Next
Return ret
End Function
Const artist = "Hollywood Undead"
Const album = "Swan Songs"
Const title = "Undead"
Const length = 265
Dim curtime As Integer
Dim user As String
Dim pass As String
Dim authkey As String
Dim httpdata As String
Dim response As ZString * 10000
Dim response_data As String
Dim sessionkey As String
Input "Username? ", user
Input "Password? ", pass
curtime = time_(NULL)
authkey = MD5str(MD5str(pass) & curtime)
httpdata = "GET /?hs=true&p=1.2.1&c=tst&v=1.0&u=" & user & "&t=" & curtime & "&a=" & authkey & " HTTP/1.1" & Chr(10) & "Host: post.audioscrobbler.com" & Chr(10) & "User-Agent: PsyMP3/1.1beta" & Chr(10) & Chr(10)
print httpdata
hStart()
Dim s As SOCKET, addr As Integer
s = hOpen()
addr = hResolve("post.audioscrobbler.com")
hConnect(s, addr, 80)
hSend(s, strptr(httpdata), len(httpdata))
hReceive(s, strptr(response), 10000)
print response
response_data = Mid(response, InStr(response, !"\r\n\r\n") + 4)
if left(response_data,3) = !"OK\n" Then
print "Server response OK."
sessionkey = Mid(response_data, 4, 32)
print "Session key: " & sessionkey
End If
hClose(s)
httpdata = !"POST /protocol_1.2 HTTP/1.1\n" & _
!"Host: post2.audioscrobbler.com\n" & _
!"User-Agent: PsyMP3/1.1beta\n"
Dim As String postdata = _
"s=" & sessionkey & "&" & _
"a[0]=" & percent_encode(artist) & "&" & _
"t[0]=" & percent_encode(title) & "&" & _
"i[0]=" & time_(NULL) & "&" & _
"o[0]=P&" & _
"r[0]=&" & _
"l[0]=" & length & "&" & _
"b[0]=" & percent_encode(album) & "&" & _
"n[0]=&m[0]="
httpdata &= _
!"Content-Length: " & Len(postdata) & !"\n" & _
!"Content-Type: application/x-www-form-urlencoded\n\n" & _
postdata
print httpdata
s = hOpen()
addr = hResolve("post2.audioscrobbler.com")
hConnect(s, addr, 80)
hSend(s, strptr(httpdata), len(httpdata))
hReceive(s, strptr(response), 10000)
response_data = Mid(response, InStr(response, !"\r\n\r\n") + 4)
if left(response_data,3) = !"OK\n" Then
print "Server response OK. Track sucessfully scrobbled!"
End If