
#cs

Functions:

	_Youtube_Read($iID)



	_Youtube_GetID($sPlayer)
	_Youtube_GetTitle($sPlayer)
	_Youtube_GetDescription($sPlayer)
	_Youtube_GetKeywords($sPlayer)

	_Youtube_GetEmbedLink($sPlayer)
	_Youtube_GetPlayerLink($sPlayer)
	_Youtube_GetPlayerSwf($sPlayer)



	_Youtube_Create($iX, $iY, $iWidth=$YT_DEFAULTWIDTH, $iHeight=$YT_DEFAULTHEIGHT)
	_Youtube_Load($aPlayerControl, $sPlayer, $iAutoPlay=True)
	_Youtube_Stop($aPlayerControl)

#CE

#include-once
#include <INet.au3>
#include <IE.au3>

Global Const $YT_DEFAULTWIDTH = 425
Global Const $YT_DEFAULTHEIGHT = 344

; Downloads the source of the Youtube page
; $iID		= Video ID (example: "sNzEQ8hG1zA")

Func _Youtube_Read($iID)

	$sSource = _INetGetSource('http://youtube.com/watch?v='&$iID)

	Return $sSource

EndFunc

; Creates a embedded IE control for playing Youtube movies
; $iX, $iY, $iWidth, $iHeight 	= Coordinates of the control

Func _Youtube_Create($iX, $iY, $iWidth=$YT_DEFAULTWIDTH, $iHeight=$YT_DEFAULTHEIGHT)

	Local $aReturn[2]

	$oIE = _IECreateEmbedded()
	$hObj = GUICtrlCreateObj($oIE, $iX, $iY, $iWidth, $iHeight)

	_IENavigate ($oIE, "about:blank", 0)
	_IEDocWriteHTML($oIE, '<body bgcolor="Black"></body>')

	$aReturn[0] = $oIE
	$aReturn[1] = $hObj

	Return $aReturn

EndFunc

; Loads a movie into a player control.
; $aPlayerControl	= A player control (return value of _Youtube_Create)
; $sPlayer			= A movie (return value of _Youtube_Read)
; [$iAutoPlay]		= Automaticly starts playing the movie if True.

Func _Youtube_Load($aPlayerControl, $sPlayer, $iAutoPlay=True)

	If $iAutoPlay Then
		$sURL = _Youtube_GetPlayerLink($sPlayer)
	Else
		$sURL = _Youtube_GetEmbedLink($sPlayer)
	EndIf

	_IENavigate ($aPlayerControl[0], $sURL, 0)

	Return 1

EndFunc

; Stops playing a movie
; $aPlayerControl	= Player control (return value of _Youtube_Create)

Func _Youtube_Stop($aPlayerControl)

	_IENavigate ($aPlayerControl[0], "about:blank", 0)
	_IEDocWriteHTML($aPlayerControl[0], '<body bgcolor="Black"></body>')

EndFunc



Func _Youtube_GetKeywords($sPlayer)

	$sSource = $sPlayer

	$iPlayerLinkStart = StringInStr($sSource,'<meta name="keywords" content=')
	If Not $iPlayerLinkStart Then Return ""
	$sBeforePlayerLink = StringLeft($sSource,$iPlayerLinkStart+StringLen('<meta name="keywords" content=')-1)
	If Not $sBeforePlayerLink Then Return ""

	$aSplit = StringSplit($sBeforePlayerLink,@CRLF)
	$iPlayerLinkLine = $aSplit[0]
	If Not $iPlayerLinkLine Then Return ""

	$aSourceSplit = StringSplit($sSource,@CRLF)
	If $iPlayerLinkLine > $aSourceSplit[0] Then Return ""
	$sPlayerLinkLine = $aSourceSplit[$iPlayerLinkLine]

	$iPlayerLinkStart = StringInStr($sPlayerLinkLine,'<meta name="keywords" content=')
	$sAfterPlayerLink = StringTrimLeft($sPlayerLinkLine,$iPlayerLinkStart+StringLen('<meta name="keywords" content=')-1)
	$sAfterPlayerLink = StringTrimRight($sAfterPlayerLink,2)
	$sAfterPlayerLink = StringTrimLeft($sAfterPlayerLink,1)

	Return $sAfterPlayerLink

EndFunc

Func _Youtube_GetEmbedLink($sPlayer)

	$sSource = $sPlayer

	$iPlayerLinkStart = StringInStr($sSource,"var embedUrl = ")
	If Not $iPlayerLinkStart Then Return ""
	$sBeforePlayerLink = StringLeft($sSource,$iPlayerLinkStart+StringLen("var embedUrl = ")-1)
	If Not $sBeforePlayerLink Then Return ""

	$aSplit = StringSplit($sBeforePlayerLink,@CRLF)
	$iPlayerLinkLine = $aSplit[0]
	If Not $iPlayerLinkLine Then Return ""

	$aSourceSplit = StringSplit($sSource,@CRLF)
	If $iPlayerLinkLine > $aSourceSplit[0] Then Return ""
	$sPlayerLinkLine = $aSourceSplit[$iPlayerLinkLine]

	$iPlayerLinkStart = StringInStr($sPlayerLinkLine,"var embedUrl = ")
	$sAfterPlayerLink = StringTrimLeft($sPlayerLinkLine,$iPlayerLinkStart+StringLen("var embedUrl = ")-1)
	$sAfterPlayerLink = StringReplace($sAfterPlayerLink,";","")
	$sAfterPlayerLink = StringReplace($sAfterPlayerLink,"'","")

	Return $sAfterPlayerLink

EndFunc

Func _Youtube_GetID($sPlayer)

	$sSource = $sPlayer

	$iPlayerLinkStart = StringInStr($sSource,"var pageVideoId = ")
	If Not $iPlayerLinkStart Then Return ""
	$sBeforePlayerLink = StringLeft($sSource,$iPlayerLinkStart+StringLen("var pageVideoId = ")-1)
	If Not $sBeforePlayerLink Then Return ""

	$aSplit = StringSplit($sBeforePlayerLink,@CRLF)
	$iPlayerLinkLine = $aSplit[0]
	If Not $iPlayerLinkLine Then Return ""

	$aSourceSplit = StringSplit($sSource,@CRLF)
	If $iPlayerLinkLine > $aSourceSplit[0] Then Return ""
	$sPlayerLinkLine = $aSourceSplit[$iPlayerLinkLine]

	$iPlayerLinkStart = StringInStr($sPlayerLinkLine,"var pageVideoId = ")
	$sAfterPlayerLink = StringTrimLeft($sPlayerLinkLine,$iPlayerLinkStart+StringLen("var pageVideoId = ")-1)
	$sAfterPlayerLink = StringReplace($sAfterPlayerLink,";","")
	$sAfterPlayerLink = StringReplace($sAfterPlayerLink,"'","")

	Return $sAfterPlayerLink

EndFunc

Func _Youtube_GetDescription($sPlayer)

	$sSource = $sPlayer

	$iPlayerLinkStart = StringInStr($sSource,'<meta name="description" content=')
	If Not $iPlayerLinkStart Then Return ""
	$sBeforePlayerLink = StringLeft($sSource,$iPlayerLinkStart+StringLen('<meta name="description" content=')-1)
	If Not $sBeforePlayerLink Then Return ""

	$aSplit = StringSplit($sBeforePlayerLink,@CRLF)
	$iPlayerLinkLine = $aSplit[0]
	If Not $iPlayerLinkLine Then Return ""

	$aSourceSplit = StringSplit($sSource,@CRLF)
	If $iPlayerLinkLine > $aSourceSplit[0] Then Return ""
	$sPlayerLinkLine = $aSourceSplit[$iPlayerLinkLine]

	$iPlayerLinkStart = StringInStr($sPlayerLinkLine,'<meta name="description" content=')
	$sAfterPlayerLink = StringTrimLeft($sPlayerLinkLine,$iPlayerLinkStart+StringLen('<meta name="description" content=')-1)
	$sAfterPlayerLink = StringTrimRight($sAfterPlayerLink,2)
	$sAfterPlayerLink = StringTrimLeft($sAfterPlayerLink,1)

	Return $sAfterPlayerLink

EndFunc

Func _Youtube_GetTitle($sPlayer)

	$sSource = $sPlayer

	$iPlayerLinkStart = StringInStr($sSource,'<meta name="title" content=')
	If Not $iPlayerLinkStart Then Return ""
	$sBeforePlayerLink = StringLeft($sSource,$iPlayerLinkStart+StringLen('<meta name="title" content=')-1)
	If Not $sBeforePlayerLink Then Return ""

	$aSplit = StringSplit($sBeforePlayerLink,@CRLF)
	$iPlayerLinkLine = $aSplit[0]
	If Not $iPlayerLinkLine Then Return ""

	$aSourceSplit = StringSplit($sSource,@CRLF)
	If $iPlayerLinkLine > $aSourceSplit[0] Then Return ""
	$sPlayerLinkLine = $aSourceSplit[$iPlayerLinkLine]

	$iPlayerLinkStart = StringInStr($sPlayerLinkLine,'<meta name="title" content=')
	$sAfterPlayerLink = StringTrimLeft($sPlayerLinkLine,$iPlayerLinkStart+StringLen('<meta name="title" content=')-1)
	$sAfterPlayerLink = StringTrimRight($sAfterPlayerLink,2)
	$sAfterPlayerLink = StringTrimLeft($sAfterPlayerLink,1)

	Return $sAfterPlayerLink

EndFunc

Func _Youtube_GetPlayerLink($sPlayer)

	$sSWF = _Youtube_GetPlayerSwf($sPlayer)
	If Not $sSWF Then Return ""

	$sSource = $sPlayer

	$iPlayerLinkStart = StringInStr($sSource,"var swfArgs = {")
	If Not $iPlayerLinkStart Then Return ""
	$sBeforePlayerLink = StringLeft($sSource,$iPlayerLinkStart+StringLen("var swfArgs = {")-1)
	If Not $sBeforePlayerLink Then Return ""

	$aSplit = StringSplit($sBeforePlayerLink,@CRLF)
	$iPlayerLinkLine = $aSplit[0]
	If Not $iPlayerLinkLine Then Return ""

	$aSourceSplit = StringSplit($sSource,@CRLF)
	If $iPlayerLinkLine > $aSourceSplit[0] Then Return ""
	$sPlayerLinkLine = $aSourceSplit[$iPlayerLinkLine]

	$iPlayerLinkStart = StringInStr($sPlayerLinkLine,"var swfArgs = {")
	$sAfterPlayerLink = StringTrimLeft($sPlayerLinkLine,$iPlayerLinkStart+StringLen("var swfArgs = {")-1)
	$sAfterPlayerLink = StringReplace($sAfterPlayerLink,"};","")
	$sAfterPlayerLink = StringReplace($sAfterPlayerLink,'"',"")
	$sAfterPlayerLink = StringReplace($sAfterPlayerLink,": ","=")
	$sAfterPlayerLink = StringReplace($sAfterPlayerLink,", ","&")
	;$sAfterPlayerLink = StringReplace($sAfterPlayerLink,"null","0")

	Return $sSWF&"?"&$sAfterPlayerLink

EndFunc

Func _Youtube_GetPlayerSwf($sPlayer)

	$sSource = $sPlayer

	$iPlayerLinkStart = StringInStr($sSource,"var swfUrl = ")
	If Not $iPlayerLinkStart Then Return ""
	$sBeforePlayerLink = StringLeft($sSource,$iPlayerLinkStart+StringLen("var swfUrl = canPlayV9Swf() ? ")-1)
	If Not $sBeforePlayerLink Then Return ""

	$aSplit = StringSplit($sBeforePlayerLink,@CRLF)
	$iPlayerLinkLine = $aSplit[0]
	If Not $iPlayerLinkLine Then Return ""

	$aSourceSplit = StringSplit($sSource,@CRLF)
	If $iPlayerLinkLine > $aSourceSplit[0] Then Return ""
	$sPlayerLinkLine = $aSourceSplit[$iPlayerLinkLine]

	$iPlayerLinkStart = StringInStr($sPlayerLinkLine,"var swfUrl = ")
	$sAfterPlayerLink = StringTrimLeft($sPlayerLinkLine,$iPlayerLinkStart+StringLen("var swfUrl = canPlayV9Swf() ? ")-1)
	$sAfterPlayerLink = StringReplace($sAfterPlayerLink,"'","")

	$aSplit = StringSplit($sAfterPlayerLink," ")

	Return $aSplit[1]

EndFunc