Ive heard off a few people that the reason this method isnt working is the way youtube makes the plid or rdm values has changed. So the information in the OP is incorrect. So i thought Id have a go at seeing how they are generated. And maybe validate my code as posted above is working correctly
On the m.youtube.com watch page...
this function...
Code:
function il(a, b)
{
return a[Sa](36) + q[Ca](q[ib]() * b)[Sa](36)
}
is called twice when you click play on the player.
Find it under 'scripts' on the chrome debugger (tools>>developer tools) and set a breakpoint.
You can then hover on the variables to get their value.
but if i understand it correctly and bearing in mind i dont know java lol, its something like...
'a' to string as base36 + (?math.floor.random? * 'b') to string as base36
the first time it comes in then a = the "build_id" number (when converted to base36 this is the static part of RDM
and b is 10000
so it appears to make the rdm from base36(build_id) with a random number 0 to 10000 as base36 on the end
however that means if the random number is less than 1296 you will not get 3 random chars on the end of the RDM.
Ive never seen this but then ive never checked that much as ive just gone on SPK's original post
the second time it calls that function...
a = time in milliseconds
i checked it... 1340813888505 was its milliseconds. Using that as timestamp my code returns "h3ylyxo9"
and the youtube code returned "h3ylyxo9" plus "2bzin1jkl"
so the first half of the plid is generated correctly
the second half it has b = 10000000000000 ("3jlxpt2ps" in base36)
so again if the random number is lower you will get a possibly much shorter plid being used
in short though i cant see why my code wouldnt produce a valid plid
but to be the same as the youtube java it can be changed to
Code:
plid = newBase36(Convert.ToInt64(timestampmilliseconds) + newBase36(Convert.ToInt64(rnd() * 10000000000000)
that is of course unless theres some wierd shit going on to hide the real numbers being generated.
try it yourself by setting a breakpoint on the function.
as a side note - to scrape the first part of rdm.
maybe this is obvious but if you "GET" this url
Code:
"http://m.youtube.com/watch?desktop_uri=%2Fwatch%3Fv%3D" + videoid + "&v=" + videoid + "&gl=US"
this example code will extract the build_id and convert to base36 giving you the static part of the RDM param
Code:
If returnedhtml.Contains("build_id\") = True Then
'get the build id
Dim working As String = returnedhtml.Substring(returnedhtml.IndexOf("build_id\") + 12, 30)
working = working.Substring(0, working.IndexOf(","))
Dim foundbaserdm As String = newBase36(Convert.ToInt64(working))
'msgbox static part of rdm
MsgBox(foundbaserdm, MsgBoxStyle.OkOnly, "rdm first part")
End If
So I think the information in this thread regarding the plid & rpm generation is correct. Maybe what now wrong is this...
izSpK said:
app=youtube_mobile
This is the main parameter in this method. By telling YouTube's statistic servers that you are a mobile phone, you bypass most security such as X views per IP per 24 hours, etc. It basically turns the filters off.
Of course this is based on my pretty much non knowledge of java so maybe someone will notice where its wrong
