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.

googlenews

Support & discussion of released scripts, and announcements of new releases.
r
roger
Halfop
Posts: 56
Joined: Sun Jun 17, 2018 12:14 pm

googlenews

Post by roger »

Tcl error [Google:News]: error "no element found" at line 1 character 0

not sure if this even works for anyone but this is the error i get when i try and run this script

any help apperciated
C
Cadaver
Voice
Posts: 18
Joined: Tue Dec 04, 2018 12:26 pm
Location: México
Contact:

Post by Cadaver »

Well, if you put the code we would see what happens ...

I can tell you that this error is common when you edit the code in a different type of text encoding than the one that works in your eggdrop/shell/vps.
-- [ Soluciones Hosting ] -- [ ElChatIRC ] --
r
roger
Halfop
Posts: 56
Joined: Sun Jun 17, 2018 12:14 pm

nothing changed, original script

Post by roger »

Code: Select all

# Google news v0.3 by nrt (01Dec2015)
# Updated GoogleNews Country links and added some more lines for redirected link support (04Jan2018) karakedi

package require tdom
package require http
package require htmlparse
package require textutil::split
package require tls 1.6.4
package present Tcl 8.6

set ::oldnews [list ]

set googlelink {https://news.google.com/news/rss/headlines/section/topic/NATION}

# Length of chars in a line.
set newsmax 412

# Links shortened to tinyurl. 1 = true , 0 = false
set tinyurl 1

# 1 = US_en (U.S.A), 2 = TR (Turkey) , 3 = FR (France), 4 = DE (Germany), 5 = UK_en (U.K) , 6 = RU (Russia)
# 7 = IT (Italy) , 8 = NL (Netherlands) , 9 = AU_en (Australia) , 10 = PT (Portugal) , 11 = AR (Arabian World) , 12 = AT_de (Austria)
# 13 = BE_fr (Belgium) , 14 = BR_pt (Brazil) , 15 = BG (Bulgaria) , 16 = CA_en (Canada) , 17 = NZ_en (New Zealand) , 18 = PL (Poland)
# 19 = RO (Romania) , 20 = CS (Czech Republic) , 21 = NO (Norway) , 22 = CH_fr (Switzerland) , 23 = SV (Sweden) , 24 = SR (Serbia)
# 25 = CN_zh (China) , 26 = JA (Japan) , 27 = GR (Greece) , 28 = LT (Lithuania) , 29 = IN_en (India) , 30 = HU (Hungary)
# 31 = AR (Argentina) , 32 = ID (Indonesia) , 33 = MY (Malaysia) , 34 = BN (Bangladesh) , 35 = MX (Mexico) , 36 = PK_en (Pakistan)
# news in this language/nation
set newslang 1

# This is for set a limit, do not post if that headline older than ** minutes
set headlinedelay 20

# .news on <- to enable on your #channel / .news off <- for turn this off!
setudef flag googlenews

bind pub mnf|oa ".news" news_control
bind evnt - init-server news_refresh

if {[package vcompare [package present tls] 1.7] > 0} {
	::http::register https 443 [list ::tls::socket -autoservername 1]
} else {
	::http::register https 443 [list ::tls::socket -request 0 -require 1 -ssl2 0 -ssl3 0 -tls1 1]
}

proc langSel {} {
	switch -exact -- $::newslang {
		1 { set url {us&hl=en&gl=US} }
		2 { set url {tr_tr&hl=tr&gl=TR} }
		3 { set url {fr&hl=fr&gl=FR} }
		4 { set url {de&hl=de&gl=DE} }
		5 { set url {uk&hl=en-GB&gl=GB} }
		6 { set url {ru_ru&hl=ru&gl=RU} }
		7 { set url {it&hl=it&gl=IT} }
		8 { set url {nl_nl&hl=nl&gl=NL} }
		9 { set url {au&hl=en-AU&gl=AU} }
		10 { set url {pt-PT_pt&hl=pt-PT&gl=PT} }
		11 { set url {ar_me&hl=ar&gl=ME} }
		12 { set url {de_at&hl=de-AT&gl=AT} }
		13 { set url {fr_be&hl=fr&gl=BE} }
		14 { set url {pt-BR_br&hl=pt-BR&gl=BR} }
		15 { set url {bg_bg&hl=bg&gl=BG} }
		16 { set url {ca&hl=en-CA&gl=CA} }
		17 { set url {nz&hl=en-NZ&gl=NZ} }
		18 { set url {pl_pl&hl=pl&gl=PL} }
		19 { set url {ro_ro&hl=ro&gl=RO} }
		20 { set url {cs_cz&hl=cs&gl=CZ} }
		21 { set url {no_no&hl=no&gl=NO} }
		22 { set url {fr_ch&hl=fr-CH&gl=CH} }
		23 { set url {sv_se&hl=sv&gl=SE} }
		24 { set url {sr_rs&hl=sr&gl=RS} }
		25 { set url {cn&hl=zh-CN&gl=CN} }
		26 { set url {jp&hl=ja&gl=JP} }
		27 { set url {el_gr&hl=el&gl=GR} }
		28 { set url {lt_lt&hl=lt&gl=LT} }
		29 { set url {in&hl=en-IN&gl=IN} }
		30 { set url {hu_hu&hl=hu&gl=HU} }
		31 { set url {es_ar&hl=es-419&gl=AR} }
		32 { set url {id_id&hl=id&gl=ID} }
		33 { set url {en_my&hl=en-MY&gl=MY} }
		34 { set url {bn_bd&hl=bn&gl=BD} }
		35 { set url {es_mx&hl=es-419&gl=MX} }
		36 { set url {en_pk&hl=en&gl=PK} }
		default { set url {us&hl=en&gl=US} }
	}
	return ${::googlelink}?ned=$url
}

proc news_refresh {type} {
	foreach chan [channels] newsbind [binds time] {
		if {([lsearch -exact [channel info $chan] "+googlenews"] != "-1")\
				&& ![string match "*Google:News*" $newsbind]} {
			bind time - "*" Google:News
			return 1
		}
	}
}

proc news_control {nick uhost hand chan text} {
	switch -nocase -- [lindex [split $text] 0] {
		"on" { if {[channel get $chan googlenews]} {
				puthelp "privmsg $chan :News already running @ $chan"
			} {
				bind time - "*" Google:News
				channel set $chan +googlenews
				puthelp "privmsg $chan :News now enabled @ $chan"
			}
		}
		"off" { if {![channel get $chan googlenews]} {
				puthelp "privmsg $chan :News already disabled @ $chan"
			} {
				unbind time - "*" Google:News
				channel set $chan -googlenews
				puthelp "privmsg $chan :News now stopped @ $chan"
			}
		}
		default { puthelp "privmsg $chan :Usage: $::lastbind <on/off>" }
	}
	return 0
}

proc getit {url} {
	if {[catch {set token [http::geturl $url -binary 1 -timeout 15000]} error]} {
		putcmdlog "[string map [list \n " "] $error]"
		return 0
	} elseif {[http::status $token] eq "ok" && [http::ncode $token] == "200"} {
		set data [http::data $token]
		::http::cleanup $token
	} elseif {[string match *[http::ncode $token]* "307|303|302|301"]} {
		upvar #0 $token state
		foreach {names values} $state(meta) {
			if {[regexp -- {^Location$} $names]} {
				putlog "Redirecting to $values"
				::http::cleanup $token
				if {[catch {set tok [http::geturl $values -binary 1 -timeout 15000]} err]} {
					putcmdlog "[string map [list \n " "] $err]"
					break
				} elseif {[http::status $tok] eq "ok" && [http::ncode $tok] == "200"} {
					set data [http::data $tok]
					::http::cleanup $tok
				} else {
					putcmdlog "[http::status $tok] - [http::code $tok]"
					::http::cleanup $tok
				}
			}
		}
	} else {
		putcmdlog "[http::status $token] - [http::code $token]"
		::http::cleanup $token
	}
	if {[info exists data]} {
		return [encoding convertfrom utf-8 $data]
	}
}

proc newsdom {} {
	set document [dom parse [getit [langSel]]]
	set root [$document documentElement]
	foreach id [$root selectNodes "/rss/channel/item"] {
		set description [[$id selectNodes "description"] text]
		set pubDate [[$id selectNodes "pubDate"] text]
		set newsurl [[$id selectNodes "link"] text]
		lappend news "[dom_trim $description] | [dom_trim $newsurl] | [clock scan [dom_trim $pubDate]]"
	}
	$document delete
	set listnews [lindex [lsort -integer -decreasing -index end $news] 0]
	return [join [htmlparse::mapEscapes $listnews]]
}

proc news_print {where what} {
	regexp {^(.*?)(http(?:s|)://[^\s]+)(.*?)$} $what - res links _
	set output [textutil::split::splitn $what $::newsmax]
	if {[string match *${links}* $output]} {
		lmap newsout $output { puthelp "privmsg $where :$newsout" }
	} else {
		lmap newsout [textutil::split::splitn $what [string length $res]] { puthelp "privmsg $where :$newsout" }
	}
}

proc dom_trim {str} {
	regsub -all -nocase {(?:<strong>|</strong>|<b>|</b>)} $str "\002" str
	regsub -all -- {<font color="#6f6f6f">(.*?)</font>} $str "(\00304\\1\003)" str
	set str [string map [list &lt\; \u003c &gt\; \u003e &nbsp\; \u0020 \" \u0027] $str]
	regsub -all -- "<.+?>" $str { } str
	regsub -all -- {\s+} $str "\u0020" str
	return [string trim $str]
}

proc news_tiny {link} {
	set tinyurl [getit http://tinyurl.com/api-create.php?[http::formatQuery url $link]]
	if {[info exists tinyurl] && [string length $tinyurl]} {
		return $tinyurl
	} else {
		return $link
	}
}

proc Google:News {args} {
	foreach chan [channels] {
		if {[channel get $chan googlenews]} {
			set news [newsdom]
			set newsdesc [lindex [split $news |] 0]
			set newslink [lindex [split $news |] 1]
			set newstime [lindex [split $news |] end]
			scan $newsdesc {%[^(]} headline
			if {![string match *${newslink}* $::oldnews] && ($headline ni $::oldnews)\
					&& ([expr {([clock seconds] - ${newstime}) < (${::headlinedelay} * 60)}])} {
				if {$::tinyurl < "1" || ![string length $::tinyurl]} {
					news_print $chan "$newsdesc : $newslink ([duration [expr {[clock seconds] - $newstime}]] ago.)"
				} else {
					news_print $chan "$newsdesc : [news_tiny [string trim $newslink]] ([duration [expr {[clock seconds] - $newstime}]] ago.)"
				}
				set ::oldnews $news
			}
		}
	}
	return 0
}

putlog "ok..."
User avatar
heartbroken
Op
Posts: 110
Joined: Thu Jun 23, 2011 11:15 pm
Location: somewhere out there

Post by heartbroken »

this one: http://paste.tclhelp.net/?id=6gql is latest GoogleNews version.
I think,he didn't send it to TclArchive yet.

Edit: Updated paste.tclhelp link! I've took this from my bot and I don't get any error.
Last edited by heartbroken on Sat Oct 26, 2019 11:19 am, edited 3 times in total.
Life iS Just a dReaM oN tHE wAy to DeaTh
r
roger
Halfop
Posts: 56
Joined: Sun Jun 17, 2018 12:14 pm

googlenews

Post by roger »

the good new is that there is no more error

the bad news is, it's not working lol

rebooted the bot, now it works :)
thank you heartbroken
much appreciated
r
roger
Halfop
Posts: 56
Joined: Sun Jun 17, 2018 12:14 pm

google news

Post by roger »

[08:58:02] Tcl error [Google:News]: wrong # args: should be "set varName ?newValue?"

new error to work on lol

can't use the url shortener, the original url works fime, still get that error tho, not sure why
User avatar
heartbroken
Op
Posts: 110
Joined: Thu Jun 23, 2011 11:15 pm
Location: somewhere out there

Post by heartbroken »

I haven't checked url shortener option before,but yes, you were right! somethings looks suspicious in there.
I've just checked to bot/logs ,still I couldn't see any error like yours in there!

workaround for url shortener:
goto getshort procedure and replace it :

Code: Select all

if {[info exists data]} {
		return $data
	} else {
		return $newslink
	}
to:

Code: Select all

if {[info exists data]} {
		return $data
	}
and in Google:News proc replace :

Code: Select all

set newslink [lindex [split $news |] 1]
to:

Code: Select all

set newslink [string trimleft [lindex [split $news |] 1]]
then find :

Code: Select all

news_print $chan "$newsdesc $newslink ([duration [expr {[clock seconds] - $newstime}]] ago.)"
				} else {
					news_print $chan "$newsdesc $newslink ([duration [expr {[clock seconds] - $newstime}]] ago.)"
and replace it with :

Code: Select all

news_print $chan "$newsdesc [news_shortened $newslink] ([duration [expr {[clock seconds] - $newstime}]] ago.)"
				} else {
					news_print $chan "$newsdesc [news_shortened $newslink] ([duration [expr {[clock seconds] - $newstime}]] ago.)"
and .rehash or .restart the bot and see if it works as expected!
Life iS Just a dReaM oN tHE wAy to DeaTh
r
roger
Halfop
Posts: 56
Joined: Sun Jun 17, 2018 12:14 pm

googlenews

Post by roger »

thanks, gonna try that right after i stuff me face.

:?
r
roger
Halfop
Posts: 56
Joined: Sun Jun 17, 2018 12:14 pm

googlenews

Post by roger »

did the modes you posted, works fine as wine.
lol, but, ok - HTTP/1.1 502 Bad Gateway
and Tcl error [Google:News]: can't read "links": no such variable :wink:
User avatar
heartbroken
Op
Posts: 110
Joined: Thu Jun 23, 2011 11:15 pm
Location: somewhere out there

Post by heartbroken »

seems like, its because of trimleft the regexp in news_print proc fails.
but,at the same time, trimleft helps to get fixed shortened news link!

you can try this edit: http://paste.tclhelp.net/?id=6gqu
I've been watching at partyline and checking logs for half an hour,i still didn't see error!
Last edited by heartbroken on Tue Oct 29, 2019 9:46 am, edited 1 time in total.
Life iS Just a dReaM oN tHE wAy to DeaTh
r
roger
Halfop
Posts: 56
Joined: Sun Jun 17, 2018 12:14 pm

googlenews

Post by roger »

lol maybe it's my own personal error? :D
User avatar
ComputerTech
Master
Posts: 399
Joined: Sat Feb 22, 2020 10:29 am
Contact:

Post by ComputerTech »

LOL your special eh i have had the same problem with that script cant remember how i fixed it, if i remember i will post how i did it ;)
ComputerTech
r
roger
Halfop
Posts: 56
Joined: Sun Jun 17, 2018 12:14 pm

Post by roger »

:mrgreen: :mrgreen: :mrgreen: :mrgreen: Tanks
User avatar
ComputerTech
Master
Posts: 399
Joined: Sat Feb 22, 2020 10:29 am
Contact:

Post by ComputerTech »

can you pastebin the way you have your current script :lol:
ComputerTech
r
roger
Halfop
Posts: 56
Joined: Sun Jun 17, 2018 12:14 pm

thx anyways

Post by roger »

no longer use this script
Post Reply