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 

ourtubeXTRA new version using YT API... including comments

 
Post new topic   Reply to topic    egghelp.org community Forum Index -> Script Support & Releases
View previous topic :: View next topic  
Author Message
WazzaUK
Voice


Joined: 02 Jul 2006
Posts: 19

PostPosted: Sun Apr 06, 2014 3:59 pm    Post subject: ourtubeXTRA new version using YT API... including comments Reply with quote

THis version works, has ALOT of addititions.... including comments and badges.....

Code:

namespace eval ourtubeXTRA {

   setudef flag ourtubeXTRA
   global tcl_platform
   
   #What language you can receive the youTube data? (if works heh)
   set lang en

   #youtube logo
   set youtubelogo "\002\00304,00You\00300,04Tube\017"

   set seperator "\002\00310•\002 "
       
   set outputline "$youtubelogo $seperator\002\00309<title> $seperator\00312Author: \00314\002<author> $seperator\00312\002Added: \00314\002<added> $seperator \00312\002Views: \00314\002<views> $seperator\00312\002Duration: \00314\002<duration> $seperator\00312\002Likes: \00309\002<likes> $seperator\00312\002Dislikes:  \00304\002<dislikes> $seperator\00312\002<badgelist> "

   set descrline "\017\00314<full_description>"
         
   set outputsearch " \00310\002<vcount> \00312\037<link>\003\037 $seperator\00309<title>\002 $seperator\00312\002Author: \00314\002<author> $seperator\00312\002Added:  \00314\002<added> $seperator\00312\002Views: \00314\002<views> $seperator\00312\002Duration: \00314\002<duration> $seperator\00312\002<badgelist>\017\00314<description>"

   set outputcomments "\00314\002<commentnum> \00312<content> \00314(Posted by \002<author>\002 on <date> <time>"

         
   set author "WazzaUK"
   set contact "WazzaUK <wallison_uk@yahoo.co.uk>"
   set originalauthor "HackeMate"
   set originalcontact "HackeMate <Sentencia@eggdrop.es>"
   set name "ourtubeXTRA"
   set projectName "ourtubeXTRA"
   set package.http [package require http]
   set protection ""
   set ytrest 10     
   set max_links 5
   set max_comments 3

   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); $lang; rv:1.9.0.3) ourtubeXTRA 1.0" -accept "text/html,application/xhtml +xml,application/xml;q=0.9,*/*;q=0.8"
     
   bind pubm - *http://www.youtube.com/watch?* ourtubeXTRA::otPub
   bind pub - !youtube ourtubeXTRA::otYoutube

   proc create_badgelist {badges} {
      set badgelist ""
      if { [string length $badges] > 1} {
         foreach badge [split $badges] {
            if { $badge ne " " } {
               append badgelist "\[$badge\] "
            }
         }
      }
      return $badgelist
   }   
   
   proc parse_text {maxlen text} {
      set newtext ""
      set ccount 0
      set linelist ""
      foreach word [split $text] {
         set prednum [ expr {([string length $word] + $ccount) + 1}]
         if {$prednum >= $maxlen} {
            set ccount 0
            lappend linelist $newtext
            set newtext ""
         } else {
            append newtext $word " "
            incr ccount
         }
         
         set ccount [ expr {[string length $word] + $ccount}]
      }

      if {$ccount >0} {
         lappend linelist $newtext
      }
      return $linelist
   
   }

   proc url_search {maxlen color styles text} {
      set i 0
      set newtext ""
      set style_ul ""
      set style_bd "" 


      if {![string is integer -strict $maxlen]} {set maxlen [ string length $text ] }
           if {($maxlen == "") || ($maxlen < 1)} {set maxlen [ string length $text ]}


      if {![string is alpha -strict $styles]} {set styles "style_ul"}
      if {[string match -nocase style_ul $styles]} {set style_ul "\037"}
      if {[string match -nocase style_bd $styles]} {set style_bd "\002"}

      if {![string is integer -strict $color]} {set color "07"}
           if {($color < 0) || ($color > 15)} {set color 07}

   
      foreach word [split $text] {
         set urlindex -1
         set newword ""
         set oldword ""
         set isurl 0
              if {[string length $word] >= 5 && [regexp {(f|ht)tp(s|)://} $word] && ![regexp {://([^/:]*:([^/]*@|\d+(/|$))|.*/\.)} $word]} {
            set wprotocol ""
            set isurl 1
            regexp {(f|ht)tp(s|)://} $word "" wprotocol

            set idx 0
            set urlindex [string first $wprotocol $word $idx ]
               set newword [string range $word $urlindex [string length $word]]
               incr idx
               set oldlen [expr [string first $wprotocol $newword 0] -1 ]
               set oldword [string range $word 0 $oldlen]
                      incr i
            set wprotocol ""
            if { $urlindex > 0 } { append oldword " " }
            regexp {(f|ht)tp(s|)://} $newword "" wprotocol
            if { $wprotocol != "" } {
                    set word "$oldword\003${color}${style_bd}${style_ul}$newword\00314${style_bd}${style_ul}"
               append newtext $word " "
            }
         
         }
         
 
         if {( $urlindex == -1 ) && ( $word != "" )} {
            append newtext $word " "
         }
      }

      set newtext [ string trimright $newtext $word ]
      set Linelen [ string length $newtext ]
      return $newtext
   }

   proc utfdecodeclean {string} {
      regsub -all -- {([\(\)\[\]\{\}\$\"\\])} $string {\\\1} string
           return $string
   }

   proc utfdecode {content} {
      if {![regexp -- & $content]} {
         return $content
      }

      set escapes {
         &nbsp; \xa0 &iexcl; \xa1 &cent; \xa2 &pound; \xa3 &curren; \xa4
         &yen; \xa5 &brvbar; \xa6 &sect; \xa7 &uml; \xa8 &copy; \xa9
         &ordf; \xaa &laquo; \xab &not; \xac &shy; \xad &reg; \xae
         &macr; \xaf &deg; \xb0 &plusmn; \xb1 &sup2; \xb2 &sup3; \xb3
         &acute; \xb4 &micro; \xb5 &para; \xb6 &middot; \xb7 &cedil; \xb8
         &sup1; \xb9 &ordm; \xba &raquo; \xbb &frac14; \xbc &frac12; \xbd
         &frac34; \xbe &iquest; \xbf &Agrave; \xc0 &Aacute; \xc1 &Acirc; \xc2
         &Atilde; \xc3 &Auml; \xc4 &Aring; \xc5 &AElig; \xc6 &Ccedil; \xc7
         &Egrave; \xc8 &Eacute; \xc9 &Ecirc; \xca &Euml; \xcb &Igrave; \xcc
         &Iacute; \xcd &Icirc; \xce &Iuml; \xcf &ETH; \xd0 &Ntilde; \xd1
         &star; \u2605 &lwarr; \u21e6 &rwarr; \u21e8 &blbt; \u25C0 &brbt; \u25b6
          &brpdt; \u23e9 &blpdt; \u23ea
         &Ograve; \xd2 &Oacute; \xd3 &Ocirc; \xd4 &Otilde; \xd5 &Ouml; \xd6
         &times; \xd7 &Oslash; \xd8 &Ugrave; \xd9 &Uacute; \xda &Ucirc; \xdb
         &Uuml; \xdc &Yacute; \xdd &THORN; \xde &szlig; \xdf &agrave; \xe0
         &aacute; \xe1 &acirc; \xe2 &atilde; \xe3 &auml; \xe4 &aring; \xe5
         &aelig; \xe6 &ccedil; \xe7 &egrave; \xe8 &eacute; \xe9 &ecirc; \xea
         &euml; \xeb &igrave; \xec &iacute; \xed &icirc; \xee &iuml; \xef
         &eth; \xf0 &ntilde; \xf1 &ograve; \xf2 &oacute; \xf3 &ocirc; \xf4
         &otilde; \xf5 &ouml; \xf6 &divide; \xf7 &oslash; \xf8 &ugrave; \xf9
         &uacute; \xfa &ucirc; \xfb &uuml; \xfc &yacute; \xfd &thorn; \xfe
         &yuml; \xff &fnof; \u192 &Alpha; \u391 &Beta; \u392 &Gamma; \u393 &Delta; \u394
         &Epsilon; \u395 &Zeta; \u396 &Eta; \u397 &Theta; \u398 &Iota; \u399
         &Kappa; \u39A &Lambda; \u39B &Mu; \u39C &Nu; \u39D &Xi; \u39E
         &Omicron; \u39F &Pi; \u3A0 &Rho; \u3A1 &Sigma; \u3A3 &Tau; \u3A4
         &Upsilon; \u3A5 &Phi; \u3A6 &Chi; \u3A7 &Psi; \u3A8 &Omega; \u3A9
         &alpha; \u3B1 &beta; \u3B2 &gamma; \u3B3 &delta; \u3B4 &epsilon; \u3B5
         &zeta; \u3B6 &eta; \u3B7 &theta; \u3B8 &iota; \u3B9 &kappa; \u3BA
         &lambda; \u3BB &mu; \u3BC &nu; \u3BD &xi; \u3BE &omicron; \u3BF
         &pi; \u3C0 &rho; \u3C1 &sigmaf; \u3C2 &sigma; \u3C3 &tau; \u3C4
         &upsilon; \u3C5 &phi; \u3C6 &chi; \u3C7 &psi; \u3C8 &omega; \u3C9
         &thetasym; \u3D1 &upsih; \u3D2 &piv; \u3D6 &bull; \u2022
         &hellip; \u2026 &prime; \u2032 &Prime; \u2033 &oline; \u203E
         &frasl; \u2044 &weierp; \u2118 &image; \u2111 &real; \u211C
         &trade; \u2122 &alefsym; \u2135 &larr; \u2190 &uarr; \u2191
         &rarr; \u2192 &darr; \u2193 &harr; \u2194 &crarr; \u21B5
         &lArr; \u21D0 &uArr; \u21D1 &rArr; \u21D2 &dArr; \u21D3 &hArr; \u21D4
         &forall; \u2200 &part; \u2202 &exist; \u2203 &empty; \u2205
         &nabla; \u2207 &isin; \u2208 &notin; \u2209 &ni; \u220B &prod; \u220F
         &sum; \u2211 &minus; \u2212 &lowast; \u2217 &radic; \u221A
         &prop; \u221D &infin; \u221E &ang; \u2220 &and; \u2227 &or; \u2228
         &cap; \u2229 &cup; \u222A &int; \u222B &there4; \u2234 &sim; \u223C
         &cong; \u2245 &asymp; \u2248 &ne; \u2260 &equiv; \u2261 &le; \u2264
         &ge; \u2265 &sub; \u2282 &sup; \u2283 &nsub; \u2284 &sube; \u2286
         &supe; \u2287 &oplus; \u2295 &otimes; \u2297 &perp; \u22A5
         &sdot; \u22C5 &lceil; \u2308 &rceil; \u2309 &lfloor; \u230A
         &rfloor; \u230B &lang; \u2329 &rang; \u232A &loz; \u25CA
         &spades; \u2660 &clubs; \u2663 &hearts; \u2665 &diams; \u2666
         &quot; \x22 &amp; \x26 &lt; \x3C &gt; \x3E O&Elig; \u152 &oelig; \u153
         &Scaron; \u160 &scaron; \u161 &Yuml; \u178 &circ; \u2C6
         &tilde; \u2DC &ensp; \u2002 &emsp; \u2003 &thinsp; \u2009
         &zwnj; \u200C &zwj; \u200D &lrm; \u200E &rlm; \u200F &ndash; \u2013
         &mdash; \u2014 &lsquo; \u2018 &rsquo; \u2019 &sbquo; \u201A
         &ldquo; \u201C &rdquo; \u201D &bdquo; \u201E &dagger; \u2020
         &Dagger; \u2021 &permil; \u2030 &lsaquo; \u2039 &rsaquo; \u203A
         &euro; \u20AC &apos; \u0027 &lrm; "" &rlm; "" ‬ "" ‭ ""
         ‮ "" — \u2014
      }
      set content [string map $escapes $content]
           regsub -all -- {&[a-zA-Z]+?;} [utfdecodeclean $content] {?} content
           regsub -all -- {&#(\d{1,3});} $content {[format %c [scan \1 %d]]} content
           return [subst $content]
   }

   proc otdisplaylines {chan text} {
      #Display results
      set otoutput [encoding convertto utf-8 $text]
           foreach line $otoutput {
         putquick "PRIVMSG $chan :$line"
           }   
   }

   proc otYouTubeComments {VideoID otoutput} {
      global ourtubeXTRA::max_comments ourtubeXTRA::youtubelog

      putlog "otYouTubeComments - videoID: $VideoID - max_comments: $max_comments"
      set url "http://gdata.youtube.com/feeds/api/videos/$VideoID/comments"
      putlog "otYouTubeComments - URL: $url"

           set token [http::geturl $url]

           upvar #0 $token state
           set data $state(body)

           set ncode ""
           regexp {[0-9]{3}} $state(http) ncode
           if {$ncode eq ""} {
              set ncode $state(http)
           }

      
      http::cleanup $token

           regsub -all {\n|\t|\r} $data "" data

      set totalcomments ""
      regexp {<openSearch:totalResults>(.*?)</openSearch:totalResults>} $data "" totalcomments


      regsub {(.*?)</id>} $data "" data
      set comments [ regexp -all -inline {</id>(.*?)</author>} $data ]
   
      set comments_items [ expr { [ llength $comments ] /2} ]

      if { $ourtubeXTRA::max_comments > $totalcomments } {
         set totalcomments $comments_items
      }

      putlog "comments contains $comments_items"

      set lmap ""

      set numcomments 0
      lappend otoutput ""
      foreach {id comment} $comments {

                        foreach {entity number} [regexp -all -inline {&#(\d+);} $comment] {
                              lappend map $entity [format \\u%04x [scan $number %d]]
         }

         set comment [string map [subst -nocomm -novar $lmap] $comment]

         set commenttitle ""
         set commentauthor ""
         set commentcontent ""
         set commentdate ""
         set commenttime ""
         set replycount 0

         regexp {<author><name>(.*?)</name>} $comment "" commentauthor
         regexp {<published>(.*?)T(.*?).000Z</published>} $comment "" commentdate commenttime
         regexp {<updated>(.*?)T(.*?).000Z</updated>} $comment "" commentdate commenttime

         regexp {<title type='text'>(.*?)</title>} $comment "" commenttitle
         regexp {<content type='text'>(.*?)</content>} $comment "" commentcontent

         regexp {<yt:replyCount>(.*?)</yt:replyCount>} $comment "" replycount
         
         putlog "rc: $replycount."
         
         set comlen [string length $commentcontent]
         
         if {($comlen == 0 ) && ($replycount >0)} {
            set commentcontent "$replycount replies on Google+"
         }



         incr numcomments
         set numtext "\00312\[$numcomments\]\002"
         set testline [string map [list "<commentnum>" $numtext "<content>" "" "<author>" $commentauthor "<date>" $commentdate "<time>" $commenttime]  ${ourtubeXTRA::outputcomments} ]
         
         set predlen [expr { [string length $testline] + [string length $commentcontent] } ]
         if { $predlen >= 380 } {
            set commentcontent [string range $commentcontent 0 [expr { 380 - [string length $testline] } ] ]
         }
         
         if {$commentcontent == "" } { set commentcontent "Empty." }
         set clen [string length $commentcontent]
         set commentcontent [url_search $clen "07" "style_ul" $commentcontent]

         set outputline [string map [list "<commentnum>" $numtext "<content>" $commentcontent "<author>" $commentauthor "<date>" $commentdate "<time>"  $commenttime] ${ourtubeXTRA::outputcomments} ]

         
         set outputline [encoding convertfrom utf-8 $outputline]
         set outputline [utfdecode $outputline]

         lappend otoutput $outputline

         if {$numcomments >= $ourtubeXTRA::max_comments} {
            break
         }
   
      }
      if { $numcomments > 0 } {
         set totalsline "\00312Showing \00312$numcomments\00312 of \00312$totalcomments \00312comment(s)."
         lappend otoutput $totalsline
      }

      return $otoutput
   }

   proc otYoutube {nick uhost hand chan text} {
      if {![channel get $chan ourtubeXTRA]} {
              if {$text eq "enable"} {
                      channel set $chan +ourtubeXTRA
                           return
                     } else {
            putquick "NOTICE $nick :${ourtubeXTRA::youtubelogo} \002\00304&star; \00300$chan has this command disabled. \00304&star;"
         }
         if {[matchattr $hand n]} {
            putquick "NOTICE $nick :You can enable it directly typing: /msg $chan !youtube enable"
         }
         return
           }

      global ourtubeXTRA::ytrest protection ourtubeXTRA::youtubelogo
      set data ""

           #This is a generic protection to prevent flood
           #No utimer required

           if {![info exists protection ]} {
              set protection [clock seconds]
           } else {
              if {![string is digit -strict $protection ]} {

                      set protection [clock seconds]

                   } else {
                           set time [expr [clock seconds]-$protection]

                           if { $time >= $ytrest } {
                              set protection [clock seconds]
                           } else {
               set floodsecs [expr [clock seconds]-$protection]
               lappend data [ utfdecode "$youtubelogo \002\00304&star; \00300Flood protection triggered: $floodsecs second(s) remaining. \00304&star;"]
                           }
                   }
           }      

           if {( $text eq "" ) && ([string length $data] == 0 )} {
                   lappend data [ utfdecode "$youtubelogo \002\00304&star; \00300Usage: !youtube <search criteria> \00304&star;"]
               
           }

      if {( [string length $text] <= 3) && ([string length $data] == 0 )} {
                   lappend data [ utfdecode "$youtubelogo \002\00304&star; \00300Error - Search parameter '$text' is too short. \00304&star;"]
      }

      if {[string length $data] == 0} {
              set data [ourtubeXTRAGet $text $chan]
       
      }

             if {[string length $data] == 0} {
         lappend data [ utfdecode "youtubelogo \0w02\00304&star; I was unable to connect to that website. Probably I get timeout. \00304&star;"]
           }

      #Display results
      set data [encoding convertto utf-8 $data]
           foreach line $data {
         putquick "PRIVMSG $chan :$line"
           }   
   }


     
   proc ourtubeXTRAGet {ask chan} {
      global ourtubeXTRA::max_links
      set resultcount "0"
           regsub -all -- {\s+} $ask "" search
           set search [http::formatQuery $search]


           set token [http::geturl http://www.youtube.com/results?search_query=$search&sm=12]

           upvar #0 $token state
           set data $state(body)

           regsub -all {\n|\t|\r} $data "" data

           set ncode ""
           regexp {[0-9]{3}} $state(http) ncode
           if {$ncode eq ""} {
              set ncode $state(http)
           }
       

      set ytlist ""
           switch -- $ncode {
            "200" {
               regexp {<p class=\"num-results\">About <strong>(.*?)</strong>} $data "" uresultcount
                        
               regexp -- {<ol id=\"search-results\" class=\"result-list\">(.*?)$} $data -> data

               #regsub {(.*?)<ol id=\"search-results\" class=\"result-list\">} $data "" data
            

               #regsub {<li class=\"yt-lockup clearfix yt-uix-tile result-item-padding yt-lockup-video yt-lockup-tile\"(.*?)<li class=\"yt-lockup  #clearfix yt-uix-tile result-item-padding yt-lockup-video yt-lockup-tile\"} $data "" data
               
               regsub {<li class=\"yt-lockup clearfix yt-uix-tile result-item-padding yt-lockup-video yt-lockup-tile\"(.*?)<li class=\"yt-lockup  clearfix yt-uix-tile result-item-padding yt-lockup-video yt-lockup-tile\"} $data "" data

               set videos [ regexp -all -inline {<li class=\"yt-lockup clearfix yt-uix-tile result-item-padding yt-lockup-video yt-lockup-tile\"(.*?)<li  class=\"yt-lockup clearfix yt-uix-tile result-item-padding yt-lockup-video yt-lockup-tile\"} $data ]

               regsub -all {,} $uresultcount "" resultcount

                         set total [ expr { [llength $videos] /2 } ]

               putlog "max links: $ourtubeXTRA::max_links - Total: $total"

                         if {$total >= $ourtubeXTRA::max_links } {
                      set numitems $max_links
               } else {
                      set numitems $total
                         }

               set search_header ""
               if {$resultcount == 0} {
                      set numitems 0
                      set search_header "${ourtubeXTRA::youtubelogo} \002\00304&star; \00300$uresultcount result(s) found for items matching '$ask'.  \00304&star;"
               } else {
                                set search_header "${ourtubeXTRA::youtubelogo} \002\00304&star; \00300Showing $numitems of $uresultcount result(s) found for  items matching '$ask'. \00304&star;"
            }

            set search_header [utfdecode $search_header]
            lappend ytlist $search_header

            putlog "Search URL: http://www.youtube.com/results?search_query=$search&sm=12"
                      set i 0
            set vcount 1
            if {$resultcount > 0} {
                         foreach {id line} $videos {
                                 set map ""
                            set title ""
                  set title_parsed ""
                            set description "This video does not have any description"
                  set description_parsed ""
                            set added "Unknown"
                            set viewcount "0"
                            set author "Unknown"
                            set link ""
                  set duration ""
                  set item_info ""
                  set item_badges ""
                  set badge_info ""
                  set badge ""
                  set badge1 ""
                  set badge2 ""
                  set badgelist ""

                                 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 -all -- {<div class=\"yt-lockup-content\">(.*?)$} $line "" item_info
                                 regexp {title=\"(.*?)\"} $item_info "" title

                  set tlen [ string length $title ]
                    
                  set title_parsed [url_search $tlen "07" "style_ul" $title]

                  regexp {href=\"(.*?)\"} $item_info "" link


                  regexp {<div class=\"yt-lockup-description yt-ui-ellipsis yt-ui-ellipsis-2\" dir=\"rtl\">(.*?)</div>} $item_info "" description
                  regexp {<div class=\"yt-lockup-description yt-ui-ellipsis yt-ui-ellipsis-2\" dir=\"ltr\">(.*?)</div>} $item_info "" description

                  regsub -all -- {(<[^>]+>)|(\t)} $description "" description 

                  set description [ string trimleft $description " " ]

                  
                  
                  regexp {<meta name=\"description\" content=\"(.*?)\">} $line "" description

                  regexp {<span class=\"video-time\">(.*?)</span>} $line "" duration

                  regexp {data-name=\"\">(.*?)</a></li><li>(.*?)\<} $line "" author added                              
                  regexp {data-name=\"\">(.*?)</a></li><li>(.*?)</li><li>(.*?) view} $line "" author added viewcount
               



                  regexp -all -- {li class=\"yt-lockup-badge-item\">(.*?)$} $line "" item_info

                  while {[regexp {<span class=\"yt-badge \" >(.*?)</span></li>} $item_info "" badge1]} {
                     if { $badge1 != "" } {
                        if {[ string first $badge1 $badgelist 0] == -1 } {
                           set badgelist [ append badgelist "$badge1 " ]
                        }
                        regsub -- {<span class=\"yt-badge \" >(.*?)</span></li>} $item_info "" item_info
                        set badge1 ""
                     }
                  }

                  set badgelist [ string trimright $badgelist " " ]
                  set badgelist [ create_badgelist $badgelist ]
               
                  set tlen [ string length $description ]
               
                       set description_parsed [url_search $tlen "07" "style_ul" $description]
                                 set yturl "http://www.youtube.com$link"

                  set description_parsed [string range $description_parsed 0 200]
                  
                  set vcount_txt "\[$vcount\]"


                  set ytoutput [string map [list "<vcount>" $vcount_txt "<link>" $yturl "<title>" $title_parsed "<author>" $author "<added>" $added  "<views>" $viewcount "<duration>" $duration "<badgelist>" $badgelist "<description>" $description_parsed] ${ourtubeXTRA::outputsearch}]

                  set ytoutput [utfdecode $ytoutput]
                                 
                  if { $i >= $ourtubeXTRA::max_links } {
                                        break
                                 }

                  incr i
                                 lappend ytlist $ytoutput
                  incr vcount
               }
            }

            return $ytlist
         }
         "404" {
                 http::cleanup $token
                      return [ utfdecode "$youtubelogO \002\00304&star; \00300No such file or webpage. \00304&star;"]
              }
                  default {
                      http::cleanup $token
                      return [ utfdecode "$youtubelogo \002\00304&star; \00300unforeseen circumstance. Server responded: $ncode \00304&star;"]
                  }
      }   
   }

     
   proc otPub {nick uhost hand chan text} {
      if {![channel get $chan ourtubeXTRA]} {
                  return
           }

      global ourtubeXTRA::ytrest ourtubeXTRA::youtubelogo protection

      set data ""
           set webTarget [lsearch -inline [split $text] {*http://*.youtube.*/watch?*}]
           
      if {([info exists protection]) && ([string is digit -strict $protection ])} {
                       
         set rest [expr [clock seconds]-$protection]

                  if { $rest >= $ytrest } {
                      set protection ""
         }
           } else {
                  set protection ""
           }


           if {$webTarget ne ""} {
              if {![regexp -nocase {^(http://)?([^/:]+)(:([0-9]+))?(/.*)?$} $webTarget]} {
                      return
                  }

                  if { $protection ne "" } {
            set floodsecs [expr [clock seconds]-$protection]
            
            lappend data [utfdecode "$youtubelogo \002\00304&star; \00300Flood protection triggered: $floodsecs second(s) remaining. \00304&star;"]
                  }

                  set protection [clock seconds]

         if {[string length $data] == 0} {
                     set data [otGet $webTarget]
         }
                  
         if {[string length $data] == 0} {
                      lappend data [ utfdecode "$youtubelogo \002\00304&star; \00300I was not able to reach Youtube's link. Probably I get a timeout. Try again.  \00304&star;"]
                 }

         set data [encoding convertto utf-8 $data]

         foreach line $data {
                     putquick "PRIVMSG $chan :$line"
         }

                  utimer $ytrest [list set protection ""]
              }
   }
     
   proc otGet {web} {
      global ourtubeXTRA::youtubelogo

           set token [http::geturl $web]
   
           upvar #0 $token state

           set data $state(body)

           regsub -all {\n|\t|\r} $data "" data


           set ncode ""
           regexp {[0-9]{3}} $state(http) ncode
           if {$ncode eq ""} {
              set ncode $state(http)
           }
           switch -- $ncode {
              "200" {

         }
                  "302" {
                      foreach {flag value} $state(meta) {
                             if {$flag eq "Location"} {
                                 http::cleanup $token
                                 lappend otoutput "$youtubelogo \002\00304&star; \00300Invalid youtube link: $ncode \00304&star;"
                  return [utfdecode $otoutput]
                             }
                      }
                  }
         "303" {
                      http::cleanup $token
                      lappend otoutput "$youtubelogo \002\00304&star; \00300That video does not exists. Server responded: $ncode \00304&star;"
            return [utfdecode $otoutput]
                  }
                  "404" {
                      http::cleanup $token
                      lappend otoutput "$youtubelogo \002\00304&star; \00300$ncode - $web - No such webpage \00304&star;"
            return [utfdecode $otoutput]
                  }
                  default {
                      http::cleanup $token
            if {[string first "Disabled" $data 0] == -1} {
               putlog "$VideoID: $data"
            }
                      lappend otoutput "$youtubelogo \002\00304&star; \00300unforeseen circumstances. Server responded: $ncode \00304&star;"
            return [utfdecode $otoutput]
            
                  }
      }
 
      

   
      set durationfmt "%M:%S"
      set badges ""
      set badge1 ""
      set badge2 ""

      set agestrict ""

      set title ""
      set title_parsed ""
      set VideoID ""
      set description "This video does not have a description"
      set full_description "This video does not have a description"
           if {[regexp {<meta property=\"og:title\" content=\"(.*?)\">} $data "" title]} {
         set tlen [ string length $title ]
      
         set title_parsed [url_search $tlen "07" "style_ul" $title]
      }
   
      regexp {<meta itemprop=\"videoId\" content=\"(.*?)\">} $data "" VideoID
      
      putlog "videoID: $VideoID"

      if {[regexp {<meta property=\"og:video:height\" content=\"(.*?)\">} $data "" videoHeight]} {
         if { $videoHeight >= 720 } { set badges [ append badges "HD "] }
      }

      if {[regexp {<meta property=\"og:restrictions:age\" content=\"(.*?)\">} $data "" agestrict]} {
         set badges [ append badges "$agestrict "]
      }

      set badges [ string trimright $badges " " ]

           regexp {<meta property=\"og:description\" content=\"(.*?)\">} $data "" description

      regexp -- {<p id=\"eow-description\" >(.*?)</p>} $data -> full_description

      #regexp -all {<div id=\"watch-description-text\">(.*?)</div>} $data "" full_description
   
      #regsub -all -- {\<[^\>]*\>|\t} $full_description "" full_description

      #set full_description [encoding convertfrom utf-8 $full_description ]
      
      #set full_description [string trimleft $full_description "|" ]

      #regsub -all {<(.|\n)*?>} $full_description "" full_description

      regsub -all -- {(<[^>]*>)|\" \"|</*>} $full_description " " full_description
      
      #set full_description [ string replace full_description [ string first \""\" $full_description 0 ] end " " ]

      set tlen [string length $full_description]

      #set full_description_parsed [url_search $tlen "07" "style_ul" $full_description]

      #set full_description_parsed [parse_text 380 $full_description]

      #if {[string length $description] <= 1} { set description "This video does not have a description" }
   
      set badgelist [ create_badgelist $badges ]

      set tlen [ string length $full_description ]

      set full_description_parsed [url_search $tlen "07" "style_ul" $full_description]

      set added "Unknown"
      regexp {<span id=\"eow-date\" class=\"watch-video-date\" >(.*?)</span>} $data "" added

      set views "0"
           regexp {<span class=\"watch-view-count \" >(.*?)</span>} $data "" views
      set views [string trimright $views " views" ]
      set views [string trimleft $views]

      set added [string trimleft $added]

           if {![regexp -all {<span class=\"likes-count\">(.*?)</span>} $data "" likes]} { set likes 0 }
           if {![regexp -all {<span class=\"dislikes-count\">(.*?)</span>} $data "" dislikes]} { set dislikes 0 }

      set author "Unknown"
             regexp -all {data-name=\"watch\">(.*?)</a><span class=\"yt-user-separator\">} $data "" author
      regexp -all {data-name=\"watch\">(.*?)</a>} $data "" author


      if {![regexp -all {<meta itemprop=\"duration\" content=\"PT(.*?)M(.*?)S\">} $data "" videomins videosecs]} {
         set videomins 0
         set videosecs 0
      }
   
      set totalseconds [expr {($videomins * 60) + $videosecs}]
      if { $videomins >= 60 } { set durationfmt "%H:%M:%S" }
      set duration [clock format $totalseconds -format $durationfmt]


           set yt_output [string map [list "<title>" $title "<author>" $author "<added>" $added "<views>" $views "<duration>" $duration "<likes>" $likes "<dislikes>"  $dislikes "<badgelist>" $badgelist ] ${ourtubeXTRA::outputline} ]

      set descr [ string map [list "<full_description>" $full_description_parsed ] ${ourtubeXTRA::descrline} ]
      set ot_output ""

      lappend ot_output $yt_output
      lappend ot_output $descr

      set VideoID [string trimleft $VideoID "/"]
      set ot_output [otYouTubeComments $VideoID $ot_output]

      set ot_output [utfdecode $ot_output]

      return $ot_output
   }


   putlog "\002\00304,00You\00300,04Tube\017 \00311:: \002\00300*Loaded* \002\00315ourtubeXTRA 1.0 by \002WazzaUK\002\00311 :: \00315based on ourtube by \002Hackemate\002."

   set Loaded 1
}
Back to top
View user's profile Send private message
bunnybump
Voice


Joined: 17 Aug 2012
Posts: 9

PostPosted: Wed Apr 23, 2014 2:55 am    Post subject: Reply with quote

uhm..another version of ourtubeXTRA made by you. i just wanna ask you one question:

"have you test it on your eggdrop before you post this script in here?"

cause i don't wanna wasting my time just for an experimently script. AFAIK, if somebody made a post of a script in here, that means it already tested and works fine to everyone (if another user got a trouble by the script, it is not because of the creator but it is because of their own mistake).

thankyou for your kind to answering my question, WazzaUK Smile
_________________
In the Beginning... Was the Command Line
Back to top
View user's profile Send private message Visit poster's website
arkadio
Voice


Joined: 13 Dec 2013
Posts: 6

PostPosted: Tue May 27, 2014 11:08 pm    Post subject: Reply with quote

Quote:
bind pubm - *http://www.youtube.com/watch?* ourtubeXTRA::otPub


It's not binding https that seems to be the default protocol for Youtube now.

Your code looks very very ugly.
Back to top
View user's profile Send private message
WazzaUK
Voice


Joined: 02 Jul 2006
Posts: 19

PostPosted: Fri Oct 02, 2015 6:42 pm    Post subject: https / tls / full API support... Reply with quote

When i wrote that code i didnt have tls compiled. I use 'Eggdrop 1.8.0 pre-init' ( has tls support ) now. I think i will go back and sort that... The code atm works with the API part - best way to process the comments. Since the public search procedure doesnt use the API its broken since google changed the return data ( im tired of fixing all the regex). Im thinking of writing a new version from scratch using just native API - its so much simpler. Well i suppose thats the point. When i look at that code now im rather ashamed its so untidy... I dont usually like to sing googles praises but they made things alot easier by adding the API...
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    egghelp.org community Forum Index -> Script Support & Releases 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