egghelp.org community Forum Index
[ egghelp.org home | forum home ]
egghelp.org community
Discussion of eggdrop bots, shell accounts and tcl scripts.
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

How do I combine the results to one line on KYoutube script

 
Post new topic   Reply to topic    egghelp.org community Forum Index -> Scripting Help
View previous topic :: View next topic  
Author Message
spithash
Master


Joined: 12 Jul 2007
Posts: 248
Location: Libera

PostPosted: Sat Dec 06, 2014 3:27 pm    Post subject: How do I combine the results to one line on KYoutube script Reply with quote

So I got this script from the archive, it is really a cool script. I modified it a bit to fit my needs and it works great, but my question is if I can combine the results from all the 3 lines of output to 1 line and split the results if it has to, let's say for example after 440 chars.

As I've seen it's currently using this:
Code:
set lines [split $data "\n"]


I hope I explain things the right way here Smile

Code:

# KYoutube.tcl v1.4
#
# Author: Outsider
# Evolutions : Krypte (krypte@europnet.org)
#
# Example :
# <Krypte> http://www.youtube.com/watch?v=s7L2PVdrb_8
# <KBot> [Youtube] Title: Game Of Thrones "Official" Show Open (HBO) | Duration: 1min 42sec | Views: 11021898
#
# You can also search a video using !youtube argument
#
# Change Log v1.4 :
# Add activation on chan !yact (on|off) enables or disables script for active channel (flags "mno" only)
# Improvement of the duration format (code from JazZ)
# Translation in English

setudef flag yact

package require http
#bind pub mno|mno !yact YouTube-Activate
#bind pubm - *http://*youtu*/watch* pubm:youtube
bind ctcp - * action:youtube
bind pub - !youtube pub:youtube
bind pub - !yt pub:youtube

# procedure for activate KYoutube.tcl on a channel

proc YouTube-Activate {nick host hand chan text} {

   if {![channel get $chan yact] && $text == "on"} {
      catch {channel set $chan +yact}
      putserv "notice $nick :YouTube: enabled for $chan"
      putlog "YouTube: script enabled (by $nick for $chan)"
   } elseif {[channel get $chan yact] && $text == "off"} {
      catch {channel set $chan -yact}
      putserv "notice $nick :YouTube: disabled for $chan"
      putlog "YouTube: script disabled (by $nick for $chan)"
   } else {
      putserv "notice $nick :YouTube: !yact (on|off) enables or disables script for active channel"
   }

}

# procedure for matching on action, e.g * Krypte is watching http://www.youtube.com/watch?v=s7L2PVdrb_8

proc action:youtube {nick host hand dest keyword args} {
           if {[channel get $dest yact]} {
        set args [lindex $args 0]
        if {![validchan $dest]} {return}
        if {$keyword == "ACTION" && [string match *http://*youtu*/watch* $args]} {pubm:youtube $nick $host $hand $dest $args}
}
}

# main youtube procedure on text

proc pubm:youtube {nick host hand chan args} {
        if {[channel get $chan yact]} {
        set args [lindex $args 0]
        while {[regexp -- {(http:\/\/.*youtub.*/watch.*)} $args -> url args]} {
                while {[regexp -- {v=(.*)&?} $url -> vid url]} {
                        set vid [lindex [split $vid &] 0]

                        set gurl "http://gdata.youtube.com/feeds/api/videos/$vid"
                        set search [http::formatQuery v 2 alt jsonc prettyprint true]
                        set token [http::config -useragent "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11" -accept "*/*"]
                        set token [http::geturl "$gurl?$search"]
                        set data [::http::data $token]
                        http::cleanup $token
                        set lines [split $data "\n"]
                        set title ""
                        set duration ""
                        set viewCount ""
                        foreach line $lines {
                                if {$title==""} {set title [lindex [regexp -all -nocase -inline {\"title\"\: \"(.*)\"} $line] 1]}
                                if {$duration==""} {set duration [lindex [regexp -all -nocase -inline {\"duration\"\: ([0-9]+)} $line] 1]}
                                if {$viewCount==""} {set viewCount [lindex [regexp -all -nocase -inline {\"viewCount\"\: ([0-9]+)} $line] 1]}
                        }
                        set title [yturldehex $title]
                        putmsg $chan "\[Youtube\] Title: \002$title\002 | Duration: \002[shortduration $duration]\002 | Views: \002$viewCount\002"
                }
        }
}
}

# Search procedure, e.g !youtube game of thrones

proc pub:youtube {nick host hand chan args} {
        if {[channel get $chan yact]} {
        set args [lindex $args 0]
        if {$args == ""} {
                putnotc $nick "Command to search: \002!youtube <argument>\002"
                return
        }
        set search [http::formatQuery v 2 alt jsonc q $args orderby viewCount max-results 3 prettyprint true]
        set token [http::config -useragent "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11" -accept "*/*"]
        set token [http::geturl "http://gdata.youtube.com/feeds/api/videos?$search"]
        set data [::http::data $token]
        http::cleanup $token

        set totalitems [lindex [regexp -all -nocase -inline {\"totalItems\"\: ([0-9]+)} $data] 1]
#        putnotc $nick "\[Youtube Search\] There is $totalitems results for your search on \002$args\002"
        set lines [split $data "\n"]
        set results ""
        foreach line $lines {
                if {[regexp -all -nocase -inline {\"id\"\: \"(.*)\"} $line] != ""} {
                        set id [lindex [regexp -all -nocase -inline {\"id\"\: \"(.*)\"} $line] 1]
                        lappend results $id
                }
                if {[regexp -all -nocase -inline {\"title\"\: \"(.*)\"} $line] != ""} {
                        set result($id,title) [yturldehex [lindex [regexp -all -nocase -inline {\"title\"\: \"(.*)\"} $line] 1]]
                }
                if {[regexp -all -nocase -inline {\"duration\"\: ([0-9]+)} $line] != ""} {
                        set result($id,duration) [lindex [regexp -all -nocase -inline {\"duration\"\: ([0-9]+)} $line] 1]
                }
                if {[regexp -all -nocase -inline {\"viewCount\"\: ([0-9]+)} $line] != ""} {
                        set result($id,viewCount) [lindex [regexp -all -nocase -inline {\"viewCount\"\: ([0-9]+)} $line] 1]
                }
        }
        foreach res $results {
                putmsg $chan "\[Youtube\] Title: \002$result($res,title)\002 | Duration: \002[shortduration $result($res,duration)]\002 | Views: \002$result($res,viewCount)\002 | Link: \002http://www.youtube.com/watch?v=$res\002"
        }
}
}

proc yturldehex {string} {
        regsub -all {[\[\]]} $string "" string
        set string [subst [regsub -nocase -all {\&#([0-9]{2,4});} $string {[format %c \1]}]]
        return [string map {&quot; \"} $string]
}

# Format the duration from seconds to x hours y mins z sec

proc shortduration {seconds} {
            set hours [expr {$seconds / 3600}]
            set minutes [expr {($seconds / 60) % 60}]
            set seconds [expr {$seconds % 60}]
            set res ""
 
            if {$hours != 0} {append res "$hours hrs "}           
            if {$minutes != 0} {append res "$minutes\min "}
            if {$seconds != 0} {append res "$seconds\sec"}
            return $res
}

putlog "KYoutube.tcl v1.4 Loaded."


Also, I'm not sure if the developer of this script will watch this thread, but, is is easy to fetch and parse in the video results, the current video upload date? Just exactly as it's parsing the video views for example, or the duration.

Thanks.
_________________
Libera ##rtlsdr & ##re - Nick: spithash
Click here for troll.tcl
Back to top
View user's profile Send private message Visit poster's website Yahoo Messenger MSN Messenger
Display posts from previous:   
Post new topic   Reply to topic    egghelp.org community Forum Index -> Scripting Help All times are GMT - 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Forum hosting provided by Reverse.net

Powered by phpBB © 2001, 2005 phpBB Group
subGreen style by ktauber