This is the new home of the egghelp.org community forum.
All data has been migrated (including user logins/passwords) to a new phpBB version.


For more information, see this announcement post. Click the X in the top right-corner of this box to dismiss this message.

Help Updating ourTube.tcl

Support & discussion of released scripts, and announcements of new releases.
r
rrc55
Voice
Posts: 29
Joined: Wed Mar 11, 2009 9:33 am

Help Updating ourTube.tcl

Post by rrc55 »

I was wondering if anyone would tell me how to get the "views" category of this script to work. Everything displays correctly except the number of views. It's always shows "no views." Here's some relevant info I think:

Code in ourTube.tcl, Line 215:

Code: Select all

            foreach {id line} $videos {
                set map {}
                foreach {entity number} [regexp -all -inline {&#(\d+);} $line] {
                    lappend map $entity [format \\u%04x [scan $number %d]]
                }
                set line [string map [subst -nocomm -novar $map] $line]
                
                regexp {<img title="(.*?)"} $line "" title
                regsub -all -- {\<[^\>]*\>|\t} $title "" title
                regexp {<div class="video-time">(.*?)</span>} $line "" time
                regsub -all -- {\<[^\>]*\>|\t} $time "" time
                regexp {class="video-description">(.*?)</div>} $line "" description
                regsub -all -- {\<[^\>]*\>|\t} $description "" description
                regexp {<button class="master-sprite ratingVS ratingVS-(.*?)"} $line "" rating
                regexp {class="video-date-added">(.*?)</span>} $line "" added
                regexp {class="video-view-count">(.*?)</span>} $line "" views
                regexp {<span class="video-username">(.*?)</a>} $line "" author
                regsub -all -- {\<[^\>]*\>|\t} $author "" author
                regexp {<a id="video-url-(.*?)"} $line "" link
                set link "http://youtube.com/watch?v=$link"
                set output [string map [list "<link>" $link "<time>" $time "<added>" $added "<title>" $title "<author>" $author "<description>" $description "<views>" $views "<rating>" $rating] $ourtube(outputsearch)]
                lappend list $output
                if {$i > $ourtube(max)} {
                    break
                }
                incr i
            }
            return $list
A snippet of code from a youtube video page:

Code: Select all

		<div id="watch-views-div">
				<span id="watch-views"><span id="watch-view-count">8,779</span> views</span>

		</div>
Script link:
http://www.egghelp.org/cgi-bin/tcl_arch ... ad&id=1594

Thank You.
r
rrc55
Voice
Posts: 29
Joined: Wed Mar 11, 2009 9:33 am

Post by rrc55 »

Actually I think these are the relevant lines.

Code: Select all

regexp {<span id=\"watch-view-count\">(.*?)</span>} $data "" views

Code: Select all

regsub -all -- {\<[^\>]*\>|\t} $views "" views

Code: Select all

    if {![string is digit -strict $views]} {
        set views "no"
    }
User avatar
speechles
Revered One
Posts: 1398
Joined: Sat Aug 26, 2006 10:19 pm
Location: emerald triangle, california (coastal redwoods)

Post by speechles »

rrc55 wrote:Actually I think these are the relevant lines.

Code: Select all

regexp {<span id="watch-view-count">(.*?)</span>} $data "" views

Code: Select all

regsub -all -- {\<[^\>]*\>|\t} $views "" views

Code: Select all

    if {![string is digit -strict $views]} {
        set views "no"
    }
Your closer than you think. ;)
<speechles> !webby http://youtube.com/watch?v=ADBTHpk0L8g --regexp <span id="watch-view-count">(.*?)</span>-- --nostrip
<sp33chy> regexp: capture1 ( 155,195 )
It's the comma causing the problem, it of course is not a digit and this part:

Code: Select all

    if {![string is digit -strict $views]} {
        set views "no"
    }
Should be removed.. and this part slightly changed...

Code: Select all

change: regexp {<span id="watch-view-count">(.*?)</span>} $data "" views

into: if {![regexp {<span id="watch-view-count">(.*?)</span>} $data "" views]} { set views "no" }
r
rrc55
Voice
Posts: 29
Joined: Wed Mar 11, 2009 9:33 am

Post by rrc55 »

You are a scholar and a gentleman.
User avatar
pogue
Voice
Posts: 28
Joined: Sun May 17, 2009 3:56 am
Contact:

Post by pogue »

I can't get this script to pull descriptions off Youtube either, but it will get the comments okay.
rrc55 wrote:You are a scholar and a gentleman.
I sent you a PM.

Thanks
User avatar
speechles
Revered One
Posts: 1398
Joined: Sat Aug 26, 2006 10:19 pm
Location: emerald triangle, california (coastal redwoods)

Post by speechles »

pogue wrote:I can't get this script to pull descriptions off Youtube either, but it will get the comments okay.
rrc55 wrote:You are a scholar and a gentleman.
I sent you a PM.

Thanks
To properly get descriptions, change this:

Code: Select all

regexp {class="video-description">(.*?)</div>} $line "" description 
Into this:

Code: Select all

regexp {description">(.*?)</div>} $line "" description 
User avatar
pogue
Voice
Posts: 28
Joined: Sun May 17, 2009 3:56 am
Contact:

Post by pogue »

I am having some trouble with this script out of the blue. In the main channel, the bot will only say "Youtube" when a script is posted, but in the bots console it says the whole bit.

However, the descriptions still is saying that there is no description found.

I've copied the code I'm using, updated from speechles and rrc55 (Thanks to both of you) to pastebin.

http://pastebin.com/f2987e2f6

IRC:

[03:33am] <~pogue> http://www.youtube.com/watch?v=ahihGKZC5Kk
[03:33am] <+BodyBuildingBot> YouTube

Console:

[04:33] ourTube: Getting http://www.youtube.com/watch?v=ahihGKZC5Kk ... from pogue on #bodybuilding.com
[04:33] ourTube: YouTube
- The Dangers of Colloidal Silver. (by pogue972) 207,396 views, 282 rating. Description: This video doesn't have any description

I'm a little baffled as to why this is happening, it was working fine previously and I can't see any configuration options that would limit its output. When I look over it, it seems like it's breaking after the first word, but I can't see why...

Thoughts?

Thanks in advance,
pogue
a
anotheregglover
Voice
Posts: 38
Joined: Thu Jan 13, 2005 12:01 am
Contact:

Post by anotheregglover »

youtube <title> tags are now multiline causing the fail.

I set it to use the meta tag instead and made some other fixes

Code: Select all

#
# ourTube.tcl 1.0.2 --
# This file search the web target and show relevant information about.
# Is posible define a YouTube account and the bot will log in. Useful
# when the link are for adult people i.e. It will show the first link
# that finds in a whole phrase.
#
# Copyright (c) 2007-2009 Eggdrop Spain 12-april-2009
#   HackeMate (Sentencia) Sentencia@eggdrop.es
#
# This program is free software; you can redistribute it and/or
# modify it _only for your own use_
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
#
# Please, use the email to contact with the author for let him know about all
# what you could do. Everyone wants develop his software as well.
#
#                   Thank you for feed my empiric life.
#
# If you like, you can contact with the author to suggest him features. By the
# way, do not ask him to make Login, he is working on that.

# This is what you need to get this script work:
# Type in partyline: .chanset #channel +ourtube

# Changelog:
#   Fixes:
#       Resolved Tcl error [otPub]: can't read "views": no such variable
#       Resolved eternal ignore-protection  issue
#
#   Added features:
#       Now will forward to new location 302 http code received when pasting
#       http://youtube. links
#       Explicit message when 404 error (not found)
#       All non 200, 302, 303, 404 errors will stop the procedure showing proper reason
#       -*- IMPORTANT -*-
#       Auto Update checker: You can verify if your ourTube copy is the lastest
#       version available typing .ourtube update in partyline
#
#       FeedBack feature. Type in partyline .ourtube feedback [your email] <message>
#       to send the author any suggestion or comment. Insults are not welcome.
#
#       Added seacher, !youtube string and it will return matches
#       it is customizable (configure ourtube(outputsearch))


setudef flag ourtube
setudef flag ourtubecolors

global ourtube tcl_platform

# (1) Enable or (0) disable colors
set ourtube(colors) 1

# Flood Protection: after show a link, will ignore all links few seconds
# This means 1 link per 10 seconds.
set ourtube(rest) 10

# What language you can receive the youTube data? (if works heh)
set ourtube(lang) en

# Limit of links at same time
set ourtube(max) 5

# Do you want see all matches at one line? (0) Yes (1) No
set ourtube(multiline) 1

# This is the final output message what you will read in your channel.
#       -*- This is not for search command (only when someone pasted link)
# You can configure all fields that your eggdrop will show.
# <title>       will return the title of the video
# <author>      It was the author himself who had uploaded the video
# <views>       How many views the video has
# <rating>      His rating
# <description> Information by author - This may be disabled because it can
#               contain spam
# <comment>     Will show the last comment if exists - Same as description, take care
#               with spam.

set ourtube(output) "\002<title>\002. (by <author>) <views> views, <rating> rating. Last comment: <comment>"

# This is the output message of search engine
#       -*- This is only for search engine
# You can configure all fields that your eggdrop will show.
# <link>        URL video link
# <time>        video's duration
# <added>       since when it is on line
# <title>       will return the title of the video
# <author>      It was the author himself who had uploaded the video
# <views>       How many views the video has
# <rating>      His rating
# <description> Information by author - This may be disabled because it can
#               contain spam

set ourtube(outputsearch) "\00312\037<link>\003\037 \00315\(<time> rating: <rating>\)\003 \"\0036<title> \0031<author> said\0036: <description>\003\" <views>,  added <added>"

# Do you want auto update this file when it is possible?
# (1) Yes (0) No - It is recommended, if youtube changes his tags probably this script will broke
set ourtube(autoupdate) 0

# This is not required to edit, or yes.

set ourtube(author) "HackeMate"
set ourtube(contact) "HackeMate <Sentencia@eggdrop.es>"
set ourtube(name) "ourTube"
set ourtube(fileName) [info script]
set ourtube(projectName) "ourTube"
set ourtube(version) "1.0.1"
set ourtube(package.http) [package require http]
set ourtube(protection) ""
if {$tcl_platform(os) eq "Linux"} {
    set platfrm "X11"
} else {
    set platfrm $tcl_platform(os)
}
http::config -useragent "Mozilla/5.0 ($platfrm; U; $tcl_platform(os) $tcl_platform(machine); $ourtube(lang); rv:1.9.0.3) ourTube 1.0" -accept "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"

bind pub - !youtube otYoutube

proc otYoutube {nick uhost hand chan text} {
    
    if {![channel get $chan ourtube]} {
		if {$text eq "enable"} {
			channel set $chan +ourtube
            channel set $chan +ourtubecolors
			otLog $chan "Usage: !youtube <search string> To see a list of matches."
			putserv "NOTICE $nick :You also can use .ourtube update and .ourtube feedback in partyline to upgrade your script or send a feedback to author of this script."
			return
		} else {
			putserv "NOTICE $nick :$chan has this command disabled."
		}
		if {[matchattr $hand n]} {
			putserv "NOTICE $nick :You can enable it directly typing: /msg $chan !youtube enable"
		}
        return
    }
    regsub -all -- {\017|\002|\037|\026|\003(\d{1,2})?(,\d{1,2})?} $text "" arg
	global ourtube
	# This is a generic protection to prevent flood ourtube.com
    # No utimer required
	#
	if {![info exists ourtube(protection)]} {
		set ourtube(protection) [clock seconds]
	} else {
		if {![string is digit -strict $ourtube(protection)]} {
			set ourtube(protection) [clock seconds]
		} else {
			set time [expr [clock seconds]-$ourtube(protection)]
			if {$time >= $ourtube(rest)} {
				set ourtube(protection) [clock seconds]
			} else {
				otLog log "Flood protection in $chan from $nick\."
				return
			}
		}
	}

	if {$arg eq ""} {
		putserv "NOTICE $nick :Tell me what to search."
		return
	}
    set data [ourtubeGet $arg]
    
    if {![channel get $chan ourtubecolors]} {
		regsub -all -- {\017|\002|\037|\026|\003(\d{1,2})?(,\d{1,2})?} $data "" data
	}
	if {[string length $data] == 0} {
		set data "I was unable to connect to that website. Probably I get timeout."
        return
	}
	if {$ourtube(multiline) != "1"} {
		putserv "PRIVMSG $chan :$data"
	} else {
		foreach line $data {
			putserv "PRIVMSG $chan :$line"
		}
	}    
}

proc ourtubeGet {ask} {
    
    global ourtube
    regsub -all -- {\s+} $ask " " search
    set search [http::formatQuery $search]
    http::config -useragent "Mozilla/5.0 (Windows NT; U; Windows NT x86; en-ES; rv:1.9.0.3) Firefox 3.0.7" -accept "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
    set token [http::geturl http://www.youtube.com/results?search_query=$search -timeout 10000]
    upvar #0 $token state
    set data $state(body)
    regsub -all {\n|\t} $data "" data
    set ncode ""
    regexp {[0-9]{3}} $state(http) ncode
    if {$ncode eq ""} {
        set ncode $state(http)
    }
    set list {}
    switch -- $ncode {
        "200" {
            set videos [regexp -all -inline {<div class="video-entry">(.*?)<div class="video-clear-list-left"></div>} $data]
            set total [expr [llength $videos] /2]
            if {$total > $ourtube(max)} {
                set list [list "Showing $ourtube(max) of $total."]
            }
            set i 2
            set title ""
            set description ""
            set rating ""
            set added ""
            set views ""
            set author ""
            set link ""
            foreach {id line} $videos {
                set map {}
                foreach {entity number} [regexp -all -inline {&#(\d+);} $line] {
                    lappend map $entity [format \\u%04x [scan $number %d]]
                }
                set line [string map [subst -nocomm -novar $map] $line]
                
                regexp {<img title="(.*?)"} $line "" title
                regsub -all -- {\<[^\>]*\>|\t} $title "" title
                regexp {<div class="video-time">(.*?)</a>} $line "" time
                regsub -all -- {\<[^\>]*\>|\t} $time "" time
                regexp {class="video-description">(.*?)</div>} $line "" description
                #regexp {"description">(.*?)</div>} $line "" description
                regsub -all -- {\<[^\>]*\>|\t} $description "" description
                regexp {<button class="master-sprite ratingL ratingL-(.*?)"} $line "" rating
                regexp {class="watch-video-added">(.*?)</span>} $line "" added
                regexp {class="watch-view-count">(.*?)</span>} $line "" views
                regexp {<span class="video-username">(.*?)</a>} $line "" author
                regsub -all -- {\<[^\>]*\>|\t} $author "" author
                regexp {<a id="video-url-(.*?)"} $line "" link
                set link "http://youtube.com/watch?v=$link"
                set output [string map [list "<link>" $link "<time>" $time "<added>" $added "<title>" $title "<author>" $author "<description>" $description "<views>" $views "<rating>" $rating] $ourtube(outputsearch)]
                lappend list $output
                if {$i > $ourtube(max)} {
                    break
                }
                incr i
            }
            return $list
        }
        "404" {
            otLog log "No such file or webpage."
            http::cleanup $token
            return [list "No such file or webpage."]
        }
        default {
            otLog log "unforeseen circumstance. Server responded: $ncode"
            http::cleanup $token
            return [list "unforeseen circumstance. Server responded: $ncode"]
        }
    }    
}
bind pubm - * otPub

proc otPub {nick uhost hand chan text} {
    
    if {![channel get $chan ourtube]} {
        return
    }
    global ourtube
    regsub -all -- {\017|\002|\037|\026|\003(\d{1,2})?(,\d{1,2})?} $text "" arg
    
    set webTarget [lsearch -inline [split $arg] {*http://*.youtube.*/watch?*}]
    if {([info exists ourtube(protection)]) && ([string is digit -strict $ourtube(protection)])} {
        set rest [expr [clock seconds]-$ourtube(protection)]
        if {$rest >= $ourtube(rest)} {
            set ourtube(protection) ""
        }
    } else {
        set ourtube(protection) ""
    }
    if {$webTarget ne ""} {
         if {! [regexp -nocase {^(http://)?([^/:]+)(:([0-9]+))?(/.*)?$} $webTarget]} {
            otLog log "Unsupported URL: $webTarget"
            return 
        }
        if {$ourtube(protection) ne ""} {
            otLog "Resting... (flood protection) [duration [expr ([clock seconds]-$ourtube(protection))]] left"
            return
        }
        set ourtube(protection) [clock seconds]
        otLog log "Getting $webTarget ... from $nick on $chan"
        set data [otGet $webTarget]
        if {!$ourtube(colors)} {
            regsub -all -- {\017|\002|\037|\026|\003(\d{1,2})?(,\d{1,2})?} $data "" data
        }
        if {[string length $data] == 0} {
            set data "I was not able to reach Youtube's link. Probably I get a timeout. Try again."
        }
        otLog log "$data"
        putserv "PRIVMSG $chan :$data"
        utimer $ourtube(rest) [list set ourtube(protection) ""]
    }
}

proc otGet {web {relocation ""}} {
    global ourtube
    set token [http::geturl $web -timeout 4000]
    upvar #0 $token state
    set lastcode $state(http)
    set ncode ""
    regexp {[0-9]{3}} $lastcode ncode
    if {$ncode eq ""} {
        set ncode $lastcode
    }
    switch -- $ncode {
        "200" {
        }
        "302" {
            foreach {flag value} $state(meta) {
                if {$flag eq "Location"} {
                    # Due to invalid youtube link but valid url syntax we can
                    # receive an url forward. this handles that
                    http::cleanup $token
                    otLog log "$web forwards us to $value"
                    return [otGet $value "(Relocated)"]
                }
            }
        }
        "303" {
            otLog log "This video does not exists."
            http::cleanup $token
            return "That video does not exists. Server responded: $lastcode"
        }
        "404" {
            otLog log "$web - No such webpage."
            http::cleanup $token
            return "$web - No such webpage"
        }
        default {
            http::cleanup $token
            otLog log "unforeseen circumstances. Server responded: $lastcode"
            return "unforeseen circumstances. Server responded: $lastcode"
        }
    }
    set data [string map {"&quot\;" "\"" "&amp\;quot\;" "\"" "&" "&"} $state(body)] 

    http::cleanup $token
    set author ""
    set description ""
    set views ""
    set rating ""
    #regexp {<title>(.*)</title>} $data "" title
    regexp {<meta name=\"title\" content=\"(.*?)\">.*} $data "" title
    regexp {class="hLink fn n contributor">(.*?)</a><br>} $data "" author
    regexp {<meta name=\"description\" content=\"(.*?)\">.*} $data "" description
    regexp {<span id=\"watch-view-count\">(.*?)</span>} $data "" views
    regexp {<div id=\"defaultRatingMessage\">(.*?)</span>.*} $data "" rating
    # This is not so smart way. I know, sorry about :)
    set comments ""
    set description ""
    regexp {<div id="recent_comments" class="comments">(.*?)<div id="div_comment_form_id} $data "" comments
    if {$comments ne ""} {
       regexp { rel="nofollow">(.*?)</a>} $comments "" user
       regexp {<span class="watch-comment-time">(.*?)</span>} $comments "" timeago
       regexp {<div class="watch-comment-body">(.*?)</div>} $comments "" comment
       set comment [string map {\n " " "<br>" ""} $comment]
       regsub -all -- {\<[^\>]*\>|\t} $comment "" comment
       regsub -all {\s+} $comment " " comment
       set comment "\<$user [string trim $timeago]\> [string trim $comment]"
    } else {
        set comment ""
    }
    regsub -all -- {\<[^\>]*\>|\t} $title "" title
    regsub -all -- {\<[^\>]*\>|\t} $description "" description
    regsub -all -- {\<[^\>]*\>|\t} $views "" views
    regsub -all -- {\<[^\>]*\>|\t} $rating "" rating
    set rating [lindex [split $rating] 0]
    set title "$relocation $title"
    set title [string trim $title]
    if {![string is digit -strict $views]} {
        set views "no"
    }
    if {![string is digit -strict $rating]} {
        set rating "no"
    }
    if {$comment eq ""} {
        set comment "This video doesn't have any comments until now"
    }
    if {$description eq ""} {
        set description "This video doesn't have any description"
    }
    set output [string map [list "<title>" $title "<author>" $author "<description>" $description "<views>" $views "<rating>" $rating "<comment>" $comment] $ourtube(output)]
    return $output
}

# upvar #0 $token state

proc otLog {target string} {
    global ourtube
    if {![validchan $target]} {
        putlog "$ourtube(name)\: $string"
    } else {
        putserv "PRIVMSG $target :$ourtube(name)\: $string"
    }
}

bind dcc n ourtube communication::welcome

namespace eval communication {
	
	# communication.tcl --
	# 	This is a little library for eggdrop as internal use
	# 	It is done to portablility - You cannot use it without a file.cgi in your
	# 	http server. If you really want that, contact me.	
	variable version 1.0
	variable feedback {http://www.eggdrop.es/cgi-bin/feedback.cgi}
	variable update {http://www.eggdrop.es/cgi-bin/update.cgi}
	
	proc welcome {hand ipx text} {
		global ourtube
		set arg [lindex [split $text] 0]
		switch -- $arg {
			"feedback" {
				set contact [lindex [split $text] 1]
				set message [join [lrange [split $text] 1 end]]
				if {($contact eq "") || ($message eq "")} {
					putdcc $ipx "$ourtube(projectName) - FeedBack"
					putdcc $ipx "Thank you for tell what you think."
					putdcc $ipx "This command sends to author an message with your suggestion, you are able to send one feedback per day (aprox)"
					putdcc $ipx "Usage: .webfeedback <your email (put it if you may want a reply or conversation with author, if not, put anything)> <tell me in english or spanish what you want say>"
				} else {
					set result [[namespace current]::Feedback $contact $ourtube(projectName) $message]
					if {$result eq ""} {
						putdcc $ipx "The server responded nothing. Did you sent a previous feedback already?"
						return
					}
					putdcc $ipx "The server responded:"
					foreach line [split $result \n] {
						putdcc $ipx $line
					}
				}
			}
			"update" {
				set download [lindex [split $text] 1]
				putdcc $ipx [join [lrange [split [[namespace current]::Update $ourtube(fileName) $ourtube(projectName) $ourtube(version) $download]] 1 end]]
			}
			default {
				putdcc $ipx "You can use '.ourtube update' to verify the last version and '.ourtube feedback' to send to author a suggestion"
			}
		}
	}
	
	proc Feedback {reporter projectName message} {
		variable feedback
		http::config -useragent "$reporter $projectName"
		set token [http::geturl "$feedback\?suggest=[http::formatQuery $message]" -timeout 4000]
		set data [http::data $token]
		http::cleanup $token
		return $data
	}
	
	proc Update {fileName projectName version {download ""}} {
		variable update
		set fs [open $fileName]
		set data [read $fs]
		close $fs
		set md5 [md5 $data]
		set query [http::formatQuery project $projectName version $version md5 $md5 download $download]
		set token [http::geturl "$update\?$query" -timeout 4000]
		set data [http::data $token]
		http::cleanup $token
        set result ""
        set info ""
        set url ""
		regexp {<!-- result -->(.*?)<!-- /result -->} $data "" result
		regexp {<!-- info -->(.*?)<!-- /info -->} $data "" info
		if {($download ne "") && ($download ne "no") && ($result == 1)} {
			regexp {<!-- data -->(.*?)<!-- /data -->} $data "" url
			if {![regexp -nocase {^(http://)?([^/:]+)(:([0-9]+))?(/.*)?$} $url]} {
				return "0 Invalid URL target file link."
			}
			set token [http::geturl $url -binary 1 -timeout 4000]
			set fileData [http::data $token]
            file rename -force -- $fileName $fileName\.bak
			set fs [open $fileName w]
			puts -nonewline $fs $fileData
			close $fs
            catch {source $fileName}
			set info "$projectName was (purged) downloaded and sourced succesfully, now you are using the lastest version available. There is a backup in $fileName\.bak"
        }
		return "$result $info"
	}
}
if {![info exists ourtube(loaded)]} {
    if {$ourtube(autoupdate) == "1"} {
        set ourtube(status) [communication::Update $ourtube(fileName) $ourtube(projectName) $ourtube(version) $ourtube(autoupdate)]
        set ourtube(result) [lindex [split $ourtube(status)] 0]
        set ourtube(info) [join [lrange [split $ourtube(status)] 1 end]]
        otLog log $ourtube(info)
    }
} 
otLog log "[file tail $ourtube(fileName)] $ourtube(version) Loaded - by $ourtube(author) (Feedback and update commands available, type .ourtube in partyline)"

set ourtube(loaded) 1
User avatar
pogue
Voice
Posts: 28
Joined: Sun May 17, 2009 3:56 am
Contact:

Post by pogue »

anotheregglover wrote:youtube <title> tags are now multiline causing the fail.

I set it to use the meta tag instead and made some other fixes
Thank you, that fixed the problem!

However, I still can't get it to properly display the number of views, ratings, or a description - although the last comment works properly. I went back in and added back in speechles' modifications and still no change. The !youtube search function doesn't appear to do anything either.

Did Youtube change their meta tags? I am not fluent in TCL, so I'm getting pretty lost, but the things I am noticing some variation in the regexp when it is pulling the data off the youtube site. I'm assuming it is getting one part for the !youtube search feature and the other for when a URL is pasted into the channel. But, they are different for each.

Note: I am using the line numbers from the appended code posted by anotheregglover above. I am using the Youtube video Afroman - Because I Got High (Uncensored) as an example for the Youtube source.
  1. Line 225 & 349 both seem to try grab the description.
  2. Line 228 & 351 appear to be both for the ratings.
  3. Line 230 & 350 appear to both be getting the view count
Description
Line 225:

Code: Select all

regexp {class="video-description">(.*?)</div>} $line "" description
Line 349:

Code: Select all

regexp {<meta name="description" content="(.*?)">.*} $data "" description
Youtube source:

Code: Select all

<meta name="description" content="Afroman - Because I Got High (Uncensored)">
Ratings
Line 228:

Code: Select all

regexp {<button class="master-sprite ratingL ratingL-(.*?)"} $line "" rating
Line 351:

Code: Select all

regexp {<div id="defaultRatingMessage">(.*?)</span>.*} $data "" rating
Youtube source:

Code: Select all

<div id="defaultRatingMessage"><span class="smallText">36,010 ratings</span>
Views
Line 230:

Code: Select all

regexp {class="watch-view-count">(.*?)</span>} $line "" views
Line 350:

Code: Select all

regexp {class="watch-view-count">(.*?)</span>} $line "" views
Youtube source:

Code: Select all

<span id="watch-view-count">12,163,389</span>
Currently, the output of the script when pasting the URL for the afroman video within the eggdrop console looks like this:

Code: Select all

[12:37] ourTube: Getting http://www.youtube.com/watch?v=305vRNoofr8 ... from pogue on #bodybuilding.com
[12:37] ourTube: Afroman - Because I Got High (Uncensored). (by ssabmudaru) no views, no rating. Last comment: <woody0900 (40 minutes ago)> had afeeling. lol...
But, as you can see, only the regexp for the view count is the same, yet it still doesn't appear to be displaying the view count at all and defaults to "no views". So, it appears to me (at least from my point of view) that there are some errors in this script in the way that it is grabbing data off of the Youtube page that need to be addressed.

Any additional help is appreciated! Thanks,
pogue
Helpful Tools:
  • Notepad++: Windows Text Editor with TCL Syntax Highlighting
  • Pastebin TCL: For easy script collaboration
J
Joose
Voice
Posts: 1
Joined: Fri Nov 13, 2009 6:52 pm

Post by Joose »

anotheregglover wrote:youtube <title> tags are now multiline causing the fail.

I set it to use the meta tag instead and made some other fixes
Or just add this:

Code: Select all

Add this line in to the script:
set title [string map {"\n" " "} $title]

Before these lines:

*snip*
set title [string map {"\n" " "} $title]
set title "$relocation $title"
set title [string trim $title]
*snip*
v
vladdeh
Voice
Posts: 33
Joined: Wed Mar 23, 2011 1:52 pm

Post by vladdeh »

Script not pulling views anymore or comments, any fixes?:p
User avatar
username
Op
Posts: 196
Joined: Thu Oct 06, 2005 9:20 am
Location: Russian Federation, Podolsk
Contact:

Post by username »

Try this.
Архив TCL скриптов для ботов Eggdrop/Windrop:
http://egghelp.ru/
N
Nash
Voice
Posts: 6
Joined: Sun Jul 29, 2012 7:14 pm

Post by Nash »

Sorry for bumping this old thread but is there an updated version of this script available?
So far i'ved tried:

youtubeURL
youtube_title
youtube_checker
ourtube
etube

and (if they even work), they only show the name of the youtube video.
No length, views, author .. etc :(

It's getting a bit frustrating trying to find a working youtube script with "some" options in it.

Halp! :oops:
User avatar
username
Op
Posts: 196
Joined: Thu Oct 06, 2005 9:20 am
Location: Russian Federation, Podolsk
Contact:

Post by username »

etube.tcl works fine:
[10:44:27] rp-f http://www.youtube.com/watch?v=VuteWrK4Nr0
[10:44:29] lamestbot Чайка ест голубя/Seagull eats pigeon (22) by Redving(24.09.2011) Cat: Животные, Tags: чайка, голубь, съела, seagull, dove, eats, pigeon, Views: 1912. Likes/Dislikes: 8/2.
[10:44:29] lamestbot На площади Сан-Марко в Венеции./San-Marco square in Venice.
[10:44:29] lamestbot Top comment: Ooooh,? how romantic!!! by ( 8 ч. назад ). (39.66ms.)
Архив TCL скриптов для ботов Eggdrop/Windrop:
http://egghelp.ru/
User avatar
username
Op
Posts: 196
Joined: Thu Oct 06, 2005 9:20 am
Location: Russian Federation, Podolsk
Contact:

Post by username »

And dont forget about .chanset #chan +etube
Архив TCL скриптов для ботов Eggdrop/Windrop:
http://egghelp.ru/
Post Reply