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.

REQ: maybe someone knows how to do this

Requests for complete scripts or modifications/fixes for scripts you didn't write. Response not guaranteed, and no thread bumping!
Post Reply
w
wckdkl0wn
Voice
Posts: 7
Joined: Sun Oct 07, 2007 1:25 am

REQ: maybe someone knows how to do this

Post by wckdkl0wn »

i looked fora script but couldnt find one. maybe someone knows of one and can point me towards it. but i am looking for a script that will look on a phpbb forum and reply back to the channel its in with the like top 3 or 5 new posts made. maybe an option to display the current users logged on. or perhaps the daily site visits. anyone know of any script that can do this?
User avatar
rosc2112
Revered One
Posts: 1454
Joined: Sun Feb 19, 2006 8:36 pm
Location: Northeast Pennsylvania

Post by rosc2112 »

If I knew how to make a script log in to a website, then retrieving data from these boards would be fairly simple. Other people have made similar requests, but I've yet to see any example script that can log in to the website to be able to pull data from them.
User avatar
user
 
Posts: 1452
Joined: Tue Mar 18, 2003 9:58 pm
Location: Norway

Post by user »

rosc2112 wrote:If I knew how to make a script log in to a website, then retrieving data from these boards would be fairly simple. Other people have made similar requests, but I've yet to see any example script that can log in to the website to be able to pull data from them.
There's no standard way to log in to a website... In phpBB, all you need to do is post the login form and you get redirected to a url with a session ID in it.

Code: Select all

# usage: getegghelp <yourUsername> <yourPassword> [theDesiredDestinationUri]
# returns: url based on uri with appended session id
proc getegghelp {user pass {uri ""}} {
	set     Q {}
	lappend Q username $user
	lappend Q password $pass
	lappend Q redirect $uri
	lappend Q login "Log in";# required by phpbb
	set t [http::geturl http://forum.egghelp.org/login.php -query [eval http::formatQuery $Q]]
	if {[http::ncode $t]==302} {
		upvar #0 $t s
		array set h $s(meta)
		http::cleanup $t
		set h(Location)
	} else {
		error "failed?"
	}
}
getegghelp rosc2112 password /search.php?search_id=newposts
Other sites might require cookies (store cookies recieved in the header field "Set-Cookie" and send it out in subsequent requests using "-headers {Cookie $theCookie}") or WWW-Authentication (you'll get a 401 when loading the page with no/wrong Authorization header (-headers {Authorization "Basic [base64encode user:pass]"}))

EDIT: here's some code to demonstrate BASIC authentication:

Code: Select all

proc geturlauth {url args} {
	# parse the url to extract user:pass
	if {![regexp -- {^([a-z]+://)?(?:([^@/]+)@)?(.+)$} $url url prefix login rest]} {
		error "Invalid url"
	}
	if {$login==""} {
		error "Don't use it if you don't need it ;)"
	}
	array set o $args
	lappend o(-headers) "Authorization" "Basic [b64e $login]"
	eval http::geturl [list $prefix$rest] [array get o]
}
# base64encode based on RS's proc in the tcl wiki
proc b64e str {
	binary scan $str B* bits
	switch [expr {[string len $bits]%6}] {
		2 {append bits 0000==}
		4 {append bits 00=}
	}
	string map {
		000000 A 000001 B 000010 C 000011 D 000100 E 000101 F
		000110 G 000111 H 001000 I 001001 J 001010 K 001011 L
		001100 M 001101 N 001110 O 001111 P 010000 Q 010001 R
		010010 S 010011 T 010100 U 010101 V 010110 W 010111 X
		011000 Y 011001 Z 011010 a 011011 b 011100 c 011101 d
		011110 e 011111 f 100000 g 100001 h 100010 i 100011 j
		100100 k 100101 l 100110 m 100111 n 101000 o 101001 p
		101010 q 101011 r 101100 s 101101 t 101110 u 101111 v
		110000 w 110001 x 110010 y 110011 z 110100 0 110101 1
		110110 2 110111 3 111000 4 111001 5 111010 6 111011 7
		111100 8 111101 9 111110 + 111111 /
	} $bits
}
Use it like http::geturl, but include user:pass@ in front of the host
(geturlauth http://user:pass@some.site/)
Have you ever read "The Manual"?
User avatar
rosc2112
Revered One
Posts: 1454
Joined: Sun Feb 19, 2006 8:36 pm
Location: Northeast Pennsylvania

Post by rosc2112 »

Saved for future reference, thanks User :)
Post Reply