Youtube.tcl par aliasangelius
#1
Smile 
Bonjour a tous

J'avais  un soucis avec le zurl.tcl un peu comem T3ns
J'ai DL celui posté par aliasangelius, et nikel.

Par contre me suis aperçu que lors d'un post d'un User, via ce lien alors que d'autres fonctionnent:
https://www.youtube.com/watch?v=vzAvnEV8Ctg

J'ai ce message en PL qui s'affiche (et rien sur le salon ou le lien youtube est lancé):

Tcl error [public_youtubedl]: can't read "res1": no such variable

Voila ou cela me renvoie dans le tcl posté par aliasangelius
PS: Les packages http et tls sont bien installés.

Merci  à vous  pour une info

tcl
set youtubedl(pattern) {https://.*youtube.*/watch\?(.*)v=([A-Za-z0-9_\-]+)}
set youtubedl(pattern1) {https://youtu.be/([A-Za-z0-9_\-]+)}
 
namespace eval youtubedl {
}
 
package require http
package require tls
 
bind pubm - * public_youtubedl
proc public_youtubedl {nick userhost handle channel args} {
    global youtubedl botnick
    set args [stripcode $args]
    if {[regexp -nocase -- $youtubedl(pattern) $args match fluff video_id] || [regexp -nocase -- $youtubedl(pattern1) $args match video_id]} {
        set useragent "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1"
        ::http::register https 443 [list tls::socket -tls1 1]
        set url "https://www.youtube.com/watch?v=$video_id"
        ::http::config -useragent $useragent
        catch { set token [::http::geturl "$url" -timeout 30000] }
        if {([info exists token]) && ([::http::status $token] == "ok")} {
        set retok [::http::data $token]
        if {[string match "*<title>YouTube</title>*" $retok] } { return }
        set res ""
        regexp {<title>(.+?)</title>} $retok res
        regsub -all {<title>} $res "" res
        regsub -all {</title>} $res "" res
        regsub -all -- "- YouTube" $res "" res
        set result [youtubedl::string_filter $res]
        regexp {<div class="watch-view-count">(.+?)</div>} $retok res1
        regsub -all {<div class="watch-view-count">} $res1 "" res1
        regsub -all {</div>} $res1 "" res1
        regsub -all " " $res1 "," res1
        set result1 [youtubedl::string_filter $res1]
        regexp {<meta itemprop="duration" content="(.+?)">} $retok res2
        regsub -all {<meta itemprop="duration" content=\"} $res2 "" res2
        regsub -all {\">} $res2 "" res2
        regsub -all {PT} $res2 "" res2
        regsub -all {M} $res2 " minutes " res2
        regsub -all {S} $res2 " secondes" res2
        http::cleanup $token
        http::unregister https
        puthelp "privmsg $channel :\002\You\0034Tube\003 Titre\002 :$result \002Vues\002 :$res1 \002Durée\002 :$res2"
        }
        }
        }
        
        
        proc youtubedl::string_filter { str } {
    set str [string map -nocase {
        "&agrave;"          "à"     "&agrave;"          "à"     "&aacute;"          "á"     "&acirc;"           "â"
        "&atilde;"          "ã"     "&auml;"            "ä"     "&aring;"           "Ã¥"     "&aelig;"           "æ"
        "&ccedil;"          "ç"     "&egrave;"          "è"     "&eacute;"          "é"     "&ecirc;"           "ê"
        "&euml;"            "ë"     "&igrave;"          "ì"     "&iacute;"          "í"     "&icirc;"           "î"
        "&iuml;"            "ï"     "&eth;"             "ð"     "&ntilde;"          "ñ"     "&ograve;"          "ò"
        "&oacute;"          "ó"     "&ocirc;"           "ô"     "&otilde;"          "õ"     "&ouml;"            "ö"
        "&divide;"          "÷"     "&oslash;"          "ø"     "&ugrave;"          "ù"     "&uacute;"          "ú"
        "&ucirc;"           "û"     "&uuml;"            "ü"     "&yacute;"          "ý"     "&thorn;"           "þ"
        "&yuml;"            "ÿ"     "&quot;"            "\""    "&amp;rsquo;"       "'"     "&euro;"            "€"
        "&amp;eacute;"      "é"     &amp;agrave;        "à"     &amp;egrave;        "è"
        "&oelig;"           "Å“"     "&Yuml;"            "Ÿ"     "&nbsp;"            " "     "&iexcl;"           "¡"
        "&cent;"            "¢"     "&pound;"           "£"     "&amp;amp;"         "&"     "&yen;"             "Â¥"
        "&brvbar;"          "¦"     "&brkbar;"          "¦"     "&sect;"            "§"     "&uml;"             "¨"
        "&die;"             "¨"     "&copy;"            "©"     "&ordf;"            "ª"     "&laquo;"           "«"
        "&not;"             "¬"     "&shy;"             "­-"    "&reg;"             "®"     "&macr;"            "¯"
        "&hibar;"           "¯"     "&deg;"             "°"     "&plusmn;"          "±"     "&sup2;"            "²"
        "&sup3;"            "³"     "&acute;"           "´"     "&micro;"           "µ"     "&para;"            "¶"
        "&middot;"          "·"     "&cedil;"           "¸"     "&sup1;"            "¹"     "&ordm;"            "º"
        "&raquo;"           "»"     "&frac14;"          "¼"     "&frac12;"          "½"     "&frac34;"          "¾"
        "&iquest;"          "¿"     "&Agrave;"          "À"     "&Aacute;"          "Á"     "&Acirc;"           "Â"
        "&Atilde;"          "Ã"     "&Auml;"            "Ä"     "&Aring;"           "Ã…"     "&AElig;"           "Æ"
        "&Ccedil;"          "Ç"     "&Egrave;"          "È"     "&Eacute;"          "É"     "&Ecirc;"           "Ê"
        "&Euml;"            "Ë"     "&Igrave;"          "ÃŒ"     "&Iacute;"          "Í"     "&Icirc;"           "ÃŽ"
        "&Iuml;"            "Ï"     "&ETH;"             "Ð"     "&Dstrok;"          "Ð"     "&Ntilde;"          "Ñ"
        "&Ograve;"          "Ã’"     "&Oacute;"          "Ó"     "&Ocirc;"           "Ô"     "&Otilde;"          "Õ"
        "&Ouml;"            "Ö"     "&times;"           "×"     "&Oslash;"          "Ø"     "&Ugrave;"          "Ù"
        "&Uacute;"          "Ú"     "&Ucirc;"           "Û"     "&Uuml;"            "Ãœ"     "&Yacute;"          "Ý"
        "&THORN;"           "Þ"     "&szlig;"           "ß"     "\r"                ""      "\t"                ""
        "'"            "\'"    "'"             "\'"    "&gt;"              ">"     "&lt;"              "<"
        """             "\'"    "&"             "&"     "#91;"              "\("    "\"             "\/"
        "]"             ")"     "{"            "("     "}"            ")"     "£"            "£"
        "¨"            "¨"     "©"            "©"     "«"            "«"     "­"            "­"
        "®"            "®"     "´"            "´"     "·"            "·"     "¹"            "¹"
        "»"            "»"     "¼"            "¼"     "½"            "½"     "¾"            "¾"
        "À"            "À"     "Á"            "Á"     "Â"            "Â"     "Ã"            "Ã"
        "Ä"            "Ä"     "Å"            "Ã…"     "Æ"            "Æ"     "Ç"            "Ç"
        "È"            "È"     "É"            "É"     "Ê"            "Ê"     "Ë"            "Ë"
        "Ì"            "ÃŒ"     "Í"            "Í"     "Î"            "ÃŽ"     "Ï"            "Ï"
        "Ð"            "Ð"     "Ñ"            "Ñ"     "Ò"            "Ã’"     "Ó"            "Ó"
        "Ô"            "Ô"     "Õ"            "Õ"     "Ö"            "Ö"     "×"            "×"
        "Ø"            "Ø"     "Ù"            "Ù"     "Ú"            "Ú"     "Û"            "Û"
        "Ü"            "Ãœ"     "Ý"            "Ý"     "Þ"            "Þ"     "ß"            "ß"
        "à"            "à"     "á"            "á"     "â"            "â"     "ã"            "ã"
        "ä"            "ä"     "å"            "Ã¥"     "æ"            "æ"     "ç"            "ç"
        "è"            "è"     "é"            "é"     "ê"            "ê"     "ë"            "ë"
        "ì"            "ì"     "í"            "í"     "î"            "î"     "ï"            "ï"
        "ð"            "ð"     "ñ"            "ñ"     "ò"            "ò"     "ó"            "ó"
        "ô"            "ô"     "õ"            "õ"     "ö"            "ö"     "÷"            "÷"
        "ø"            "ø"     "ù"            "ù"     "ú"            "ú"     "û"            "û"
        "ü"            "ü"     "ý"            "ý"     "þ"            "þ"     "&amp;"             "&"
        
    } $str]
    regsub -all "<br />" $str " " str
    return "${str}"
}
 
 
proc stripcode {str} {
    return [regsub -all -- {(\d{1,2})?(,\d{1,2})?} $str ""]
}


  Répondre   Avertir
#2
Bonsoir,

Tout d'abord, merci d'utiliser les balises [ tcl ] plutôt que [ code ], c'est plus lisible (j'ai modifié ton message).

Et youtube a encore changé sa mise en page, il faut donc reprendre la plupart des regexp pour avoir les bonnes infos.
  Répondre   Avertir
#3
(30/12/2017, 02:25)CrazyCat a écrit : Bonsoir,

Tout d'abord, merci d'utiliser les balises [ tcl ] plutôt que [ code ], c'est plus lisible (j'ai modifié ton message).

Et youtube a encore changé sa mise en page, il faut donc reprendre la plupart des regexp pour avoir les bonnes infos.

bonsoir
Ah oui mince me suis trompé dans le balisage.
Mais ça ne le fait que sur certains liens les 3/4 passent bien, bizarre ?
j'pige pas trop

Bon réveillon pour demain et gaffe au retour soyez prudents
A l'année prochaine Smile
  Répondre   Avertir
#4
SAlut,

apparement aprés quelques essais, ça ne "fonctionne" pas avec les liens de difusion de stream directs uniquement . peut etre un ajout a faire dans le code du tcl.

Cordialement.
  Répondre   Avertir
#5
Les liens Youtube qui pointent vers un streaming ne renseignent pas le nombre de vues, or le script compte sur la récupération de cette valeur pour fonctionner.
  Répondre   Avertir
#6
yep, re, all

Aprés un test rapide en comentant les lignes

tcl
#regexp {<div class="watch-view-count">(.+?)</div>} $retok res1
        #regsub -all {<div class="watch-view-count">} $res1 "" res1
        #regsub -all {</div>} $res1 "" res1
        #regsub -all " " $res1 "," res1
        #set result1 [youtubedl::string_filter $res1]



ça semble fonctionner. ( ceux qui avaient dans la ligne:
tcl
puthelp "privmsg $channel :\002\posé par \0034 $nick \003 Titre\002 : - $result  - (  $url )  \002Durée\002 :$res2  - vues: $res1 "


retirer la derniere partie "vues" , save /rehash le bot, et ça fonctionne .
  Répondre   Avertir
#7
Ou alors vérifier que la variable $res1 existe avant de travailler dessus, afin que le script puisse continuer à afficher le nombre de vues pour les liens Youtube non-streaming.
  Répondre   Avertir
#8
(30/12/2017, 21:33)MenzAgitat a écrit : Ou alors vérifier que la variable $res1 existe avant de travailler dessus, afin que le script puisse continuer à afficher le nombre de vues pour les liens Youtube non-streaming.

Entièrement d'accord avec ça, autant garder la fonctionnalité pour les pages où elle est disponible:
tcl
regexp {<div class="watch-view-count">(.+?)</div>} $retok res1
if { [info exists $res1] } {
   regsub -all {<div class="watch-view-count">} $res1 "" res1
   regsub -all {</div>} $res1 "" res1
   regsub -all "Â " $res1 "," res1
} else {
   set res1 "n/a (streaming)"
}


  Répondre   Avertir
#9
coucou,
ben oui, je n'avait fait qu'un truc rapidement, pour palier au soucis de stream direct , bien mieux de regarder si $res1 est là on continue, sinon, ou l'ignore.
Cordialement.
  Répondre   Avertir


Sujets apparemment similaires...
Sujet Auteur Réponses Affichages Dernier message
  Besoin d'aide Eggdrop TCL Lien YouTube Zion 3 791 28/01/2019, 13:06
Dernier message: CrazyCat
  [Résolu] Youtube tcl (Zurl.tcl) ne fonctionne plus Krypte 23 8,239 28/04/2017, 18:22
Dernier message: Alucard`68
  youtube script zyrte 31 15,883 18/01/2016, 17:17
Dernier message: MisterS
  erreur script youtube zyrte 17 8,464 18/11/2012, 11:31
Dernier message: CrazyCat

Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)