Hi com,
ich bin grad am scripten und habe ein nebenergebnis, dass bestimmt mal jemand gebrauchen kann
die youtube suche ohne webbrowser (basierend auf _StringBetween)
es wird ein suchbegriff eingegeben, die anzahl an ergebnissen (1-20) und ob playlisten auch aufgelistet werden sollen
hier mal der code: (ein beispiel ist dabei ;))
YouTube Suche
; Suchergebnisse youtube herausfinden
#Include <Array.au3>
#Include <INet.au3>
$sSeach = InputBox("YouTube Suche", "Suchbegriff hier eingeben => " & @CRLF & "Col0: Titel - Col1: URL")
$array = _YouTubeSeach($sSeach, 20, False)
If Not @error Then
_ArrayDisplay($array, "Suchergebnisse@youtube.com")
Else
MsgBox(16, "Fehler", "Ein unbekannter Fehler ist aufgetreten!")
EndIf
; #FUNCTION# ==========================================================================================
; Function Name..: _YouTubeSeach($sSeach, $iCount = 10, $vPList = False)
; Description....: Suche bei YouTube ohne Webbrowser (PlayListen können ausgeschlossen werden!)
; Parameter(s)...: $sSeach - Suchbegriff
; (optional) $iCOunt - Ergebnisrückgabe (aus technischen gründen -> max 20)
; (optional) $vPList - Playlists auch anzeigen? (True/False)
; Return Value(s): Erfolg - Array mit der Anzahl aller Einträgen (2D Array | Col0 - Titel | Col1 - URL)
; Fehler - 0 und setzt @error
; | 1 - $sSeach ist leer
; | 2 - $iCount ist über dem Limit oder zu niedrig
; | 3 - Fehler beim umsetzen
; | 4 - $yPList ist nicht True/False
; Author(s)......: black_skorpi
; Example(s).....: Yes
;======================================================================================================
Func _YouTubeSeach($sSeach, $iCount = 10, $vPList = False)
If $sSeach = "" Then Return SetError(1, 0, 0)
; Umgebauter _StringBetween, also nicht ganz meins aber schon ziemlich
$sSeach = StringReplace($sSeach, ",", "%2C")
$sSeach = StringReplace($sSeach, "+", "%2B")
$sSeach = StringReplace($sSeach, "#", "%23")
$sSeach = StringReplace($sSeach, "/", "%2F")
$sSeach = StringReplace($sSeach, ":", "%3A")
$sSeach = StringReplace($sSeach, ";", "%3B")
$sSeach = StringReplace($sSeach, "€", "%40")
$sSeach = StringReplace($sSeach, "$", "%24")
$sSeach = StringReplace($sSeach, "%", "%25")
$sSeach = StringReplace($sSeach, "&", "%26")
$sSeach = StringReplace($sSeach, "=", "%3D")
$sSeach = StringReplace($sSeach, "?", "%3F")
$sSeach = StringReplace($sSeach, " ", "+")
If $iCount < 1 And $iCount > 20 Then Return SetError(2, 0, 0)
; Das geht villt auch schneller aber egal
$sSource = _INetGetSource("http://www.youtube.com/results?search_query=" & $sSeach & "&aq=f")
Local $s_pattern_escape = "(\.|\||\*|\?|\+|\(|\)|\{|\}|\[|\]|\^|\$|\\)", $sIfvPL = ""
; Titel suchen
Local $sSeachStart = '" class="yt-uix-hovercard-target" title="', $sSeachEnd = '" rel="nofollow">'
$sStartSeach = StringRegExpReplace($sSeachStart, $s_pattern_escape, "\\$1")
$sEndSeach = StringRegExpReplace($sSeachEnd, $s_pattern_escape, "\\$1")
Local $aYouTubeTitle = StringRegExp($sSource, "(?s)" & "(?i)" & $sStartSeach & "(.*?)" & $sEndSeach, 3)
If @error Then Return SetError(3, 0, 0)
$aYouTubeTitle = _ArrayCombinations($aYouTubeTitle, 1)
For $i = 1 To $aYouTubeTitle[0] / 2
$aYouTubeTitle[$i] = $aYouTubeTitle[$i * 2]
Next
; URL suchen
Local $sSeachStart = '" href="', $sSeachEnd = '" class="yt-uix-hovercard-target" title="'
If $vPList = False Then $sSeachStart &= '/watch?v='
$sStartSeach = StringRegExpReplace($sSeachStart, $s_pattern_escape, "\\$1")
$sEndSeach = StringRegExpReplace($sSeachEnd, $s_pattern_escape, "\\$1")
Local $aYouTubeURL = StringRegExp($sSource, "(?s)" & "(?i)" & $sStartSeach & "(.*?)" & $sEndSeach, 3)
If @error Then Return SetError(3, 0, 0)
$aYouTubeURL = _ArrayCombinations($aYouTubeURL, 1)
For $i = 1 To $aYouTubeURL[0] / 2
$aYouTubeURL[$i] = $aYouTubeURL[$i * 2]
Next
; Array mit einträgen erstellen
If $vPList = False Then $sIfvPL = "/watch?v="
Dim $aYouTubeErg[$iCount + 1][2]
For $i = 1 To $iCount
$aYouTubeErg[$i][0] = $aYouTubeTitle[$i]
$aYouTubeErg[$i][1] = "http://www.youtube.com" & $sIfvPL & $aYouTubeURL[$i]
Next
$aYouTubeErg[0][0] = $iCount
$aYouTubeErg[0][1] = $iCount
Return $aYouTubeErg
EndFunc ;==>_YouTubeSeach
aus technischen gründen können nicht mehr als 20 ergebnisse gezeigt werden (werdet ihr sehen wenn irh es versucht(es kommen die nächsten ergebnisse doppelt!)
ein kurzes feedback wär cool