The following allows someone to create "smart" links on their web site. This is just a simple system and is not very advanced, but it works quite well (given its purpose). If a link is not active (because a server is down), the link is shown as such.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | def main(index, links, key):
try:
index = file(index, 'rU', 0).read()
try:
links = file(links, 'rU', 0).read()
try:
source = build(index, links, key)
try:
html(source)
except:
plain('ERROR: the source could not be displayed.')
except:
plain('ERROR: the source could not be built.')
except:
plain('ERROR: %s (LINKS) cannot be found.' % links)
except:
plain('ERROR: %s (INDEX) cannot be found.' % index)
def build(index, links, key):
links = parse(links)
links = check(links)
links = write(links)
index = final(index, links, key)
return index
def parse(links):
links = links.splitlines()
for index in range(len(links)):
links[index] = links[index].split(' ', 1)
return links
def check(links):
from socket import socket
for index in range(len(links)):
try:
test = socket()
test.settimeout(0.05)
test.connect((links[index][0], 80))
except:
links[index][0] = None
return links
def write(links):
string = str()
for link in links:
string += '\t<h3>\n\t\t'
if link[0] is None:
string += link[1]
else:
string += '<a href="http://' + link[0] + '/">' + link[1] + '</a>'
string += '\n\t</h3>\n'
return string [:-1]
def final(index, links, key):
key = '<!--' + key + '-->'
index = index.replace(key, links)
return index
def html(string):
print 'Content-type: text/html'
print
print string
def plain(string):
print 'Content-type: text/plain'
print
print string
if __name__ == '__main__':
main('index.txt', 'links.txt', 'Python: Insert Links')
|
The following files show how this code can be used.
index.txt
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><HTML><HEAD>
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=iso 8859-1">
<TITLE>CGI Playground</TITLE>
<STYLE type="text/css">
<!--
BODY {
FONT-SIZE: small; COLOR: #000000; FONT-FAMILY: "trebuchet ms", Verdana, Arial, Helvetica, sans-serif; BACKGROUND-COLOR: #FFFFFF
}
H1 {
FONT-SIZE: large;
}
A:hover {
COLOR: #ff9900; TEXT-DECORATION: underline;
}
.footer {
TEXT-ALIGN: center; FONT-SIZE: smaller;
}
.footer IMG {
BORDER: 1px solid #888;
}
-->
</STYLE>
</HEAD>
<BODY bgColor="#ffffff" text="#000000">
<H1 align="center">Welcome to Abyss Web Server</H1>
<P>
<B>Abyss Web Server</B> is running correctly on your system. You should now change this page with yours.
</P>
<P>
Please include in your web pages (at least the first) the <b><i>'Powered by Abyss Web Server'</i></b> banner to promote the use of the software.
</P>
<hr>
<CENTER>
<P CLASS="footer">
Abyss Web Server -
Copyright © 2001-2005 <A HREF="http://www.aprelium.com" >Aprelium Technologies</A> - All rights reserved
</P>
<P CLASS="footer">
<A HREF="http://www.aprelium.com" ><IMG SRC="pwrabyss.gif" ALT="Powered by Abyss Web Server" TITLE="Powered by Abyss Web Server" BORDER="0" WIDTH="88" HEIGHT="31"></A>
</P>
<hr>
<h2>
Why is this the CGI Playground?
</h2>
<h3>
<a href="/python/">Here</a> you will find several different CGI scripts written in Python.<br>
For your convenience, a <a href="/python/help.html">page of descriptions</a> has been setup.
</h3>
<h3>
You also have access to <a href="/C/">Volume C</a> and <a href="/Z/">Volume Z</a>.
</h3>
<h3>
If you are wondering about the links below,<br>
just take a look at the <a href="/python/python_script_viewer.py?file=C%3A%5CProgram+Files%5CAbyss+Web+Server%5Chtdocs%5Cindex.py">source code</a>.
</h3>
<hr>
<h2>
Links:
</h2>
<!--Python: Insert Links-->
<hr>
<h2>
Door Signs:
</h2>
<h3>
<a href="/door_signs/johnson_211/">Johnson 211</a>
</h3>
<h3>
<a href="/door_signs/johnson_212/">Johnson 212</a>
</h3>
<hr>
<h2>
Python Games:
</h2>
<h3>
<a href="DynamiteSetup.exe">Dynamite</a>
</h3>
<h3>
<a href="SolarWolf.exe">Solar Wolf</a>
</h3>
<hr>
</CENTER>
</BODY></HTML>
links.txt
rmelc208.dorms.bju.edu Randy Melchert
mtuck322.dorms.bju.edu Mark Tucker
pbeni427-web.dorms.bju.edu Peter Beninate
zcoch215.dorms.bju.edu Zachary Cochran
kcruc212.dorms.bju.edu Kevin Cruce
nblac490.dorms.bju.edu Nathanael Black
ahamm894.dorms.bju.edu Aaron Hammons
jcris964.dorms.bju.edu Jonathan Crisan
kstil371.dorms.bju.edu Kennie Still
mangl442.dorms.bju.edu Melody Anglea
aangl403.dorms.bju.edu Andy Anglea
npard220.dorms.bju.edu Nathaniel Pardington
mberg338.dorms.bju.edu Mary Berg
tscot390.dorms.bju.edu Tyler Scott
jjame471.dorms.bju.edu Justin James
jpitt678.dorms.bju.edu James Pitts0
Tags: cgi
index.txt.
links.txt.
Sorry About That. I was trying to show the contents of the index.txt file, but it is HTML source. Does anyone have a suggestion as to how I might be able to post the source here?
The infinite recursion loop hole. Let's think about pages linking to each other as directed graphs.
And let's say that link-pages made with a recipe such as this link to other link-pages of a similar kind.
If the graph of linking has cycles: then pages linking (even indirectly) to pages in cycles would never show up.
Instead the various web hosts will start an endless parade of sending each other requests.
This cool feature will probably be better if implemented in the browser instead of in websites.
Not a problem. Notice that this program only makes a connection to another web server. It does not actaully make a request. Therefore, Python would not be invoked on each server that is checked.
Not A Problem. Notice that this program only makes
a connection to another web server.
It does not actaully make a request.
Therefore, Python would not be invoked
on each server that is checked.