Vi vil lage en liste med
navnene på de europeiske landområdene i fila.
Vi bruker jQuery-AJAX og lager følgende JavaSkript.
_script1.js
function getIt(){
$.ajax({
// alternative løsninger
//url:"getfile27.py",
url:"urllibnopar27.py",
//url:"urllibpar27.py",
type:'GET',
success:function(data,status,xhr)
{
useIt(xhr.responseText);
},
error:function(data)
{
document.getElementById("dump2").innerHTML=data.statusText;
//console.log(status);
}
});
}
function useIt(T){
// error ?
if(T.trim().startsWith("error")){
document.getElementById("dump2").innerHTML=T;
return;
}
// accumulate the result
var result="";
// split on lines
var lines= T.split("\n");
// walk lines
for(var i=0;i < lines.length;i++){
// remove starting and trailing whitespace
var oneLine=lines[i].trim();
// has line a length and is not header line
//(start with iso if read from geonames)
// we may want to use the header line if we want to make a table for instance
if((oneLine.length > 10)&&(!oneLine.startsWith("iso")))
{
// split pieces
var piece=oneLine.split('\t');
// ok line with given name ?
if((piece.length ==12)&&(piece[4].length > 0))
// is it in europe
if(piece[8]=="EU")
result+="<li>"+piece[4]+"</li>";
}
}
elt=document.getElementById("dump2");
elt.innerHTML='<ul>'+result+'</ul>';
}
Du kan test tre varianter av pythonskriptet som formidler data:
En enkel GET:
_urllibnopar27.py
#! /usr/bin/python2
import cgitb; cgitb.enable()
import httplib,sys
print 'Content-type: text/plain; \n\n'
try:
# set up a connection to host, borres.hiof.no or geonames
conn = httplib.HTTPConnection("borres.hiof.no")
#conn = httplib.HTTPConnection("ws.geonames.org")
# send a get request for a certain file
conn.request("GET", "/wep/data/geografi/land.txt")
# must be a registered user at geonames
#conn.request("GET", "/countryInfoCSV?username=YOUR_USER_NAME")
# make sure we allways starts return with error
# if something go wrong so we
# reckognize it when we get the result
# read the response, header
r1 = conn.getresponse()
# expect 200 as a signal for all is well
if r1.status!=200:
print 'error access problem'
print r1.status, r1.reason
else:
s=r1.read()
print s
conn.close()
except:
print 'error cannot connect'
En POST, hvis vi ønsker å sende data:
_urllibpar27.py
#! /usr/bin/python2
import httplib, urllib
"""
using POST with possible parameters
"""
print 'Content-type: text/plain; \n\n'
try:
# prepare header
headers = {"Content-type": "application/x-www-form-urlencoded",
"Accept": "text/plain"}
# geonames
# prepare parameters
# must be a registered user at geonames
## params = urllib.urlencode({'username':'YOUR_USER_NAME'})
## conn = httplib.HTTPConnection("ws.geonames.org")
## conn.request("POST", "/countryInfoCSV", params, headers)
#borres
params = urllib.urlencode({})
conn = httplib.HTTPConnection("borres.hiof.no")
conn.request("POST", "/wep/data/geografi/land.txt", params, headers)
r1 = conn.getresponse()
# ok ?
if r1.status!=200:
print 'error access problem'
print r1.status, r1.reason
else:
# get data
data = r1.read()
print data
conn.close()
except:
print 'error cannot access data'
En enkel filkopi som har noen ulemper i feilhåndtering:
_getfile27.py
#! /usr/bin/python2
import cgitb; cgitb.enable()
import urllib,sys
"""
very simple , but will return a html-page with error message
when it does not find the file
"""
theUrl='https://borres.hiof.no/wep/data/geografi/land.txt'
#Download a file and print it
print 'Content-type: text/plain; \n\n'
try:
f=urllib.urlopen(theUrl)
S=f.read()
f.close()
print S
except:
print "error"
#res=sys.exc_info()
#print res[1]
Hvis du vil arbeide med dette må du altså plassere pythonskritene på din egen server og du må:
Sørge for at de er skrevet med enkel linjeskift slik som linux vil ha det
Gi python skriptene rettigheter 755. Dette kan du gjøre ved å logge deg på serveren f.eks. med Putty [1] ,
lokalisere katalogen med filene og skrive kommandoen
chmod 755 *.py