Mise en forme de code: pensez à utiliser les balises [ tcl ] et [ /tcl ] (sans les espaces bien sûr) autour de vos codes tcl afin d'avoir un meilleur rendu et une coloration syntaxique. x


Youtube
#1
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é !
  Répondre
#2
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.
  Répondre
#3
Youtube fournit une API gratuite : https://developers.google.com/youtube/v3...earch/list
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.
  Répondre
#4
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é !
  Répondre
#5
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 :)
  Répondre
#6
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é !
  Répondre
#7
Sinon, tu peux utiliser le script de m00nie: https://www.m00nie.com/youtube-eggdrop-s...ng-api-v3/
  Répondre
#8
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é !
  Répondre
#9
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.
  Répondre
#10
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é !
  Répondre
#11
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.
  Répondre
#12
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é !
  Répondre
#13
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é !
  Répondre
#14
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
  Répondre
#15
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é !
  Répondre


Sujets apparemment similaires...
Sujet Auteur Réponses Affichages Dernier message
  [Résolu] Youtube pheeric 1 788 11/01/2020, 00:10
Dernier message: pheeric
Smile Youtube.tcl par aliasangelius pheeric 8 3,909 02/01/2018, 17:25
Dernier message: cestlemien
  [Résolu] Youtube tcl (Zurl.tcl) ne fonctionne plus Krypte 23 10,915 28/04/2017, 18:22
Dernier message: Alucard`68
  youtube script zyrte 31 19,654 18/01/2016, 17:17
Dernier message: MisterS
  erreur script youtube zyrte 17 10,692 18/11/2012, 11:31
Dernier message: CrazyCat

Atteindre :


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