Bonsoir
J'avais remonté un bug sur Youtube.tcl il y a quelques temps, puis tout était revenu en ordre..
Là depuis 1 mois (je n'ai pu m'en occuper avant) j'ai le même bug lors du post d'un lien sur un chan.
Message d'erreurs en PL :
[23:55:15] Tcl error [public_youtubedl]: can't read "res1": no such variable
je tape : .set errorInfo
set errorInfo:
[23:55:18] <RadioDJ> Currently: can't read "res1": no such variable
[23:55:18] <RadioDJ> Currently: while executing
[23:55:18] <RadioDJ> Currently: "regsub -all {<div class="watch-view-count">} $res1 "" res1"
[23:55:18] <RadioDJ> Currently: (procedure "public_youtubedl" line 20)
[23:55:18] <RadioDJ> Currently: invoked from within
[23:55:18] <RadioDJ> Currently: "public_youtubedl $_pubm1 $_pubm2 $_pubm3 $_pubm4 $_pubm5"
Ligne 20 :
Code: if {([info exists token]) && ([::http::status $token] == "ok")} {
Pour info le code tcl correspondant :
Code: 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"
}
}
}
Si quelqu'un a une idée je suis preneur merci et bonnes vacs a ceux qui y sont :)
Quand on a la connaissance, ne pas la partager ne peux faire avancer la communauté !
Mon idée est simple: le code des pages youtube a changé.
Et le N° de ligne donné par errorInfo est le N° de ligne dans la procédure, pas dans le script, donc regsub -all {<div class="watch-view-count">} $res1 "" res1
Et la ligne précédente n'as pas pu affecter $res1, donc la regexp <div class="watch-view-count">(.+?)</div> n'a pas matché.
J'ai l'impression que tout passe en JS maintenant, du moins quand on va sur youtube avec un navigateur "normal". Je vais faire des tests avec un navigateur texte qui s'approche de ce que voit un eggdrop.
Toute l'actualité de mes scripts ici (dernière mise à jour le 22/04/2020)
Tout programme comporte au moins un bug et pourrait être raccourci d'au moins une instruction, de quoi l'on peut déduire que tout programme peut être réduit à une seule instruction qui ne fonctionne pas.
Bonsoir
Cool l'API mais bon cela ne va pas donner le titre qu'un User donnera sur un salon donné ? Enfin je dis ça je pige keudale en English...
Et même en mettant en Français ça traduit pas, le vieux eggdrop a encore de beaux jours devant lui... je pense.
Merci , mais cela ne résout pas mon pb...
Quand on a la connaissance, ne pas la partager ne peux faire avancer la communauté !
03/08/2020, 23:57
(This post was last modified: 04/08/2020, 08:58 by CrazyCat.)
Le lien https://developers.google.com/youtube/v3...esentation fournit les informations qui seront plus adéquates. Mais il faut lire l'anglais. Et le JSon :)
J'ai un peu regardé l'API... Le mieux est d'utiliser un accès par API_KEY, et on peut faire une requête simple:
Code: curl \
'https://www.googleapis.com/youtube/v3/videos?part=snippet%2CcontentDetails%2Cstatistics&id=cl5tb4v_TQ8&key=[YOUR_API_KEY]' \
--header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \
--header 'Accept: application/json' \
--compressed
Le retour est un json assez complet:
Code: {
"kind": "youtube#videoListResponse",
"etag": "uTGatY8jG3uZX5jidBIXjOSCRcA",
"items": [
{
"kind": "youtube#video",
"etag": "G2LbGaomqDBYEMe8CHMg0T9wxfA",
"id": "cl5tb4v_TQ8",
"snippet": {
"publishedAt": "2020-07-16T17:34:29Z",
"channelId": "UCQ68OPQ68nl9w6NoJMeJhvA",
"title": "Chaplin vs Trumpet and drums",
"description": "Avec @samuelklein on s'est lancé le défi de doubler cette tirade mythique, grand kiff à réaliser !",
"thumbnails": {
"default": {
"url": "https://i.ytimg.com/vi/cl5tb4v_TQ8/default.jpg",
"width": 120,
"height": 90
},
"medium": {
"url": "https://i.ytimg.com/vi/cl5tb4v_TQ8/mqdefault.jpg",
"width": 320,
"height": 180
},
"high": {
"url": "https://i.ytimg.com/vi/cl5tb4v_TQ8/hqdefault.jpg",
"width": 480,
"height": 360
},
"standard": {
"url": "https://i.ytimg.com/vi/cl5tb4v_TQ8/sddefault.jpg",
"width": 640,
"height": 480
},
"maxres": {
"url": "https://i.ytimg.com/vi/cl5tb4v_TQ8/maxresdefault.jpg",
"width": 1280,
"height": 720
}
},
"channelTitle": "Jeremy Lecomte trumpet",
"categoryId": "23",
"liveBroadcastContent": "none",
"localized": {
"title": "Chaplin vs Trumpet and drums",
"description": "Avec @samuelklein on s'est lancé le défi de doubler cette tirade mythique, grand kiff à réaliser !"
}
},
"contentDetails": {
"duration": "PT1M20S",
"dimension": "2d",
"definition": "hd",
"caption": "false",
"licensedContent": false,
"contentRating": {},
"projection": "rectangular"
},
"statistics": {
"viewCount": "479",
"likeCount": "50",
"dislikeCount": "1",
"favoriteCount": "0",
"commentCount": "6"
}
}
],
"pageInfo": {
"totalResults": 1,
"resultsPerPage": 1
}
}
La seule petite difficulté que je vois sur ce retour, c'est la durée exprimée dans du non-standard (du moins pour moi): PT1M20S => 1'20". Si c'est pour afficher la durée, c'est simple à transformer, si c'est pour faire des calculs, il va falloir jouer avec les scanf :)
C'est très gentil mais hors de mes capacités..
Le bon vieux tcl devrait pouvoir être modifié peut être ?
sinon bah tant pis je me résignerais a le supprimer :(
Quand on a la connaissance, ne pas la partager ne peux faire avancer la communauté !
Je vois que dans les commentaires sur son site (commentaires en english) il semble qu'il y ait pas mal de bugs sur son tcl ..
Quand on a la connaissance, ne pas la partager ne peux faire avancer la communauté !
Les commentaires ne sont pas tous récents, alors que la dernière version du script l'est.
Donc: as-tu pensé à tester et te faire une idée par toi-même ? De toutes manières, tu ne risques rien à essayer vu que ton ancien script ne semble plus fonctionner et que ça ne te fais pas perdre ton ancien script.
Au pire, s'il y a un bug, on peut le corriger et transmettre les correctifs à m00nie.
Je viens de regarder au plus près, il faut créer aussi une clé API pour que les requêtes puissent retourner les titres Youtube etc..
Ce qui veut dire, je pense après avoir fouiné sur Google, que je dois mettre mes identifiants google etc.
Il me semble aussi avoir lu "qu'il fallait payer" .. une redevance ou un truc du style en abonnement ou autre, j'ai fait de la traduction Chrome et Google..
Ben si c’est cela non :)
Si y a pas d'autres solutions pour trouver un système via l’ancien tcl Youtube.
Le lien donné dans le script pour créer une clé API :
Grab your own key @ https://developers.google.com/youtube/v3/
J'avoue que je suis pas très chaud pour ça ..
Quand on a la connaissance, ne pas la partager ne peux faire avancer la communauté !
Il te semble beaucoup, mais tu ne fouilles pas assez.
Oui, il faut un compte google pour avoir une clé d'API... Je ne vois pas le problème. Si tu as peur de laisser des traces chez google (oh mon dieu ! La NSA sait que j'ai une API qui va chercher des infos sur une vidé de Beyoncé !), je peux te filer le compte de Raoul Poildur, je le crée demain en 30s.
Ensuite, tu peux utiliser gratuitement l'API, tu as juste un quota réduit (1000 requêtes par jour ?) Si tu as besoin de plus de requêtes, tu utilises des ressources de youtube, c'est normal que tu payes.
Et si tu veux utiliser "l'ancien système", bon courage, pour ma part je me sens (sans avoir trop cherché, je l'avoue) incapable de faire un système simple et efficace (sans faire 25 requêtes http) pour récupérer les bonnes infos sur youtube.
Sur ce, tout est dit je pense. Tu refais le tcl, tu utilises celui de m00nie, tu payes quelqu'un pour remplacer l'eggdrop, c'est toi qui vois. De mon côté, le sujet est clos.
Si si j'ai fouillé t'affole spas, j'ai même créé une clé API :)
Ceci dit vu que je ne connais pas suffisamment le débian (même si j'ai l'accès Root) ou sont hébergé mes eggys, je dois attendre que le dev m'installe le "package json" avant que je test mais le tcl est prêt, avec sa clé API :p
J'avoue m'être emballé a la lecture de la génération des clés API, mais bon j'ai horreur des trucs ou tu dois montrer patte blanche ..
J'ai toujours été dans la méfiance et ma foi, c’est pas plus mal.
Je vous tiens au courant dès que j'ai pu lancer la bête.
Quand on a la connaissance, ne pas la partager ne peux faire avancer la communauté !
Bonsoir,
De retour :)
Donc le Youtube de m00nie me donne des erreurs en PL après un lien posté :
[19:04:55] m00nie::youtube::autoinfo is running
[19:04:55] m00nie::youtube::autoinfo url is: https://www.youtube.com/watch?v=NPSvCJ9v7vI and id is: NPSvCJ9v7vI
[19:04:55] m00nie::youtube::getinfo Rawpage length is: 477
[19:04:55] Tcl error [m00nie::youtube::autoinfo]: key "items" not known in dictionary
[19:04:57] .set errorInfo
[19:04:57] <RadioDJ> Currently: key "items" not known in dictionary
[19:04:57] <RadioDJ> Currently: while executing
[19:04:57] <RadioDJ> Currently: "dict get [json::json2dict $rawpage] items"
[19:04:57] <RadioDJ> Currently: (procedure "getinfo" line 8)
[19:04:57] <RadioDJ> Currently: invoked from within
[19:04:57] <RadioDJ> Currently: "getinfo $url"
[19:04:57] <RadioDJ> Currently: (procedure "m00nie::youtube::autoinfo" line 7)
[19:04:57] <RadioDJ> Currently: invoked from within
[19:04:57] <RadioDJ> Currently: "m00nie::youtube::autoinfo $_pubm1 $_pubm2 $_pubm3 $_pubm4 $_pubm5"
Posté comme demandé
Merci :)
Quand on a la connaissance, ne pas la partager ne peux faire avancer la communauté !
Juste après la ligne putlog "m00nie::youtube::getinfo Rawpage length is: [string length $rawpage]" , ajoute:
tcl putlog "Raw page content: $rawpage"
Tu reçois peut-être une erreur que tu ne vois pas
15/08/2020, 22:11
(This post was last modified: 15/08/2020, 22:12 by pheeric.)
Bonsoir,
Merci pour le code, installé mais :
lien donné :
https://www.youtube.com/watch?v=8hdBIi5c8ZE
[22:08:10] m00nie::youtube::throttlecheck search term or video id: 8hdBIi5c8ZE, is throttled at the moment
.set errorInfo
[22:08:11] set errorInfo
[22:08:11] <RadioDJ> Currently: key "items" not known in dictionary
[22:08:12] <RadioDJ> Currently: while executing
[22:08:12] <RadioDJ> Currently: "dict get [json::json2dict $rawpage] items"
[22:08:12] <RadioDJ> Currently: (procedure "getinfo" line 9)
[22:08:12] <RadioDJ> Currently: invoked from within
[22:08:12] <RadioDJ> Currently: "getinfo $url"
[22:08:12] <RadioDJ> Currently: (procedure "m00nie::youtube::autoinfo" line 7)
[22:08:12] <RadioDJ> Currently: invoked from within
[22:08:12] <RadioDJ> Currently: "m00nie::youtube::autoinfo $_pubm1 $_pubm2 $_pubm3 $_pubm4 $_pubm5"
Quand on a la connaissance, ne pas la partager ne peux faire avancer la communauté !
|