Communauté Eggdrop

Version complète : erreur script youtube
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Pages : 1 2
voilà,j'ai trouvé ce script, mais y'a un beug

commande : !youtube un titre et ca renvoi le lien youtube

le script :

tcl
### YouTube Searching script. v0.1
### Made by Mookie		
### Contact me at Efnet for more information or suggestions
### V0.3 Fixed + added spam protection
 
package require http

### Settings ###
 
set youtube(timeout) "600000"		;# Youtube geturl timeout. (better leave this default)
set youtube(results) "5"		;# Results to display
set youtube(trigger) "!youtube"		;# Search trigger
set youtube(spam) "10"			;# Spam protection in seconds

#########################################################
## Don't edit below unless you know what you're doing. ##
#########################################################
 
 
bind pub - $::youtube(trigger) youtube
 
proc youtube {nick uhost hand chan arg} {
	if {[info exists ::checks($nick)] && ([clock seconds] - $::checks($nick)) < $::youtube(spam)} { sendmsg $chan "Fk off spammer.."; return }
	set ::checks($nick) [clock seconds]
	if {$arg == ""} { putmsg $nick "Please use: $::youtube(trigger) KEYWORD"; return }
	set form [http::formatQuery search_query $arg search search]
	set tok [http::geturl http://www.youtube.com/results?search_type=&$form -timeout $::youtube(timeout)]
	set data [http::data $tok]
	http::cleanup $tok
	set a "0"
	while {[regexp -- {<a id="video-short-title.*?" href="(.*?)"  title="(.*?)" rel="nofollow">(.*)$} $data -> number title data]} {
		if {$a == $::youtube(results)} { break }
		sendmsg $chan "\[Title: $title Link:http://youtube.com$number\]"
		incr a
	}
	if {![info exists title]} { sendmsg $chan "\002Error:\002 Nothing found for '$arg'" }
}
proc "sendmsg" { target message } {
	sputraw "PRIVMSG [string tolower $target] :$message"
}
proc "sputraw" { text } {
	set text [string trim $text]
	putdccraw 0 [string length $text\n] $text\n
}




En Erreur , j'ai :

Citation :.set errorInfo
[08:16:46] ‹YouTube› [08:17] #Zyrte# set errorInfo
[08:16:47] ‹YouTube› Currently: can't read "state(after)": no such element in array
[08:16:47] ‹YouTube› Currently: while executing
[08:16:47] ‹YouTube› Currently: "after cancel $state(after)"


merci d'avance
bonjour,

est tu sur que ton erreur vienne du script youtube ? a tu bien le package require http comme indiquer dans le tcl ?

tcl
package require http



j'ai tester le TCL est je n'ai pas d'erreur.
ba j'ai un http.tcl d'installer oui ....
salut,

zyrte a écrit :En Erreur , j'ai :

Citation :.set errorInfo
[08:16:46] ‹YouTube› [08:17] #Zyrte# set errorInfo
[08:16:47] ‹YouTube› Currently: can't read "state(after)": no such element in array
[08:16:47] ‹YouTube› Currently: while executing
[08:16:47] ‹YouTube› Currently: "after cancel $state(after)"

c est une erreur dans le package http, mais elle n'influe en rien sien sur le fonctionnement du tcl.
je dirais que le problème vient de cette ligne la:
tcl
set tok [http::geturl <a href="http://www.youtube.com/results?search_type=&$form" target="_blank">http://www.youtube.com/results?search_type=&$form</a> -timeout $::youtube(timeout)]


essais de la remplacer par
Code :
set tok [http::geturl http://www.youtube.com/results?search_type=&$form -timeout $::youtube(timeout)]
j'ai remplacer, mais, j'ai une erreur :

Citation :[09:44:06] ‹YouTube› [09:44] Tcl error [youtube]: wrong # args: should be "http::geturl url ..."

Citation :.set errorInfo
[09:46:02] ‹YouTube› [09:46] #Zyrte# set errorInfo
[09:46:02] ‹YouTube› Currently: wrong # args: should be "http::geturl url ..."
[09:46:02] ‹YouTube› Currently: while executing
[09:46:02] ‹YouTube› Currently: "http::geturl"
[09:46:02] ‹YouTube› Currently: (procedure "youtube" line 6)
[09:46:02] ‹YouTube› Currently: invoked from within
[09:46:02] ‹YouTube› Currently: "youtube $_pub1 $_pub2 $_pub3 $_pub4 $_pub5"
djkenny a écrit :étrange, la modification ne passe pas et le site affiche 2 fois la même ligne :x

essais de la remplacer par
Code :
set tok [http::geturl http://www.youtube.com/results?search_type=&$form -timeout $::youtube(timeout)]

J'ai remplacé, mais, ca ne marche pâs non plus, ca me donne sur le canal irc :

Citation :[09:48:05] ‹@Zyrte› !youtube chat
[09:48:06] ‹@YouTube› Error: Nothing found for 'chat'

avec :

Citation :[09:48:26] ‹Zyrte› .set errorInfo
[09:48:26] ‹YouTube› [09:48] #Zyrte# set errorInfo
[09:48:26] ‹YouTube› Currently: can't read "state(after)": no such element in array
[09:48:26] ‹YouTube› Currently: while executing
[09:48:26] ‹YouTube› Currently: "after cancel $state(after)"
Code :
proc youtube {nick uhost hand chan arg} {
   if {[info exists ::checks($nick)] && ([clock seconds] - $::checks($nick)) < $::youtube(spam)} { sendmsg $chan "Fk off spammer.."; return }
   set ::checks($nick) [clock seconds]
   if {$arg == ""} { putmsg $nick "Please use: $::youtube(trigger) KEYWORD"; return }
   set form [http::formatQuery search_query $arg search search]
   set tok [http::geturl http://www.youtube.com/results?search_type=&$form -timeout $::youtube(timeout)]
   set data [http::data $tok]
   http::cleanup $tok
   set a "0"
   while {[regexp -- {<h3><a href="(.*?)" dir="ltr" title="(.*?)" >(.*)$} $data -> number title]} {
      if {$a == $::youtube(results)} { break }
      sendmsg $chan "\[Title: $title Link:http://youtube.com$number\]"
      incr a
   }
   if {![info exists title]} { sendmsg $chan "\002Error:\002 Nothing found for '$arg'" }
}
voila le script complet et complétement débogué
que dois je modifier pour avoir qu'un titre a la place de 5 titres ? et aussi j'ai des erreur d'accent :

[15:21:06] ‹+Zyrte› !youtube diams
[15:21:08] ‹Youtube› [ Diam's ( Diam's Dieze#39;s)- Enfants Du Désert Link: http://youtube.com/watch?v=YXdfgKjvl4c" class="yt-uix-tile-link]
Tu fais de l'humour ou tu te fous de nous ?
Dans ton premier post, je vois:
tcl
set youtube(results) "5"      ;# Results to display



Pour les accents, il y a une solution dans http://www.eggdrop.fr/board/tcl-pour-rad...-1111.html
non, j'ai trouvé mais j'ai ce beug là, quand j'tape la commande :

‹+Youtube|Youtube› [ Merzhin-Les Nains de Jardins Link: http://youtube.com/watch?v=kmmWUEq4c3I" class="yt-uix-tile-link]
Il faut remplacer la regexp:
tcl
if {[regexp -- {<h3 id="video-long-title-(.*?)"><a href="(.*?)" class="yt-uix-tile-link" dir="ltr" title="(.*?)" >.*$} $d -> longtitle number title]} {


merci Crazycat, ca marche mieux comme ca.
bonjour ,le script ne marche plus :(

-14:44:08- ‹(Zyrte)› !y benabar
-14:44:09- ‹(+Youtube)› Error: Nothing found for 'benabar'
Le code html de youtube a changé:
tcl
if {[regexp -- {<div class="yt-lockup-content"><h3 ><a yt-uix-contextlink yt-uix-sessionlink yt-uix-tile-link result-item-translation-title"dir="ltr"title="(.*?)"data-sessionlink="(.*?)"href="(.*?)">(.*)</a>} $d -> longtitle number title]} {



A tester
Pages : 1 2