User:Eleanorg/2.1/Placard Generator: Difference between revisions
Line 159: | Line 159: | ||
Go here, click link, get your custom placard: | Go here, click link, get your custom placard: | ||
http://pzwart3.wdka.hro.nl/~egreenhalgh/cgi-bin/urllib/scrapedPlacards/socialistScrapePdf.cgi | http://pzwart3.wdka.hro.nl/~egreenhalgh/cgi-bin/urllib/scrapedPlacards/socialistScrapePdf.cgi | ||
(not working atm because www-data not able to write files - asked evo to change permissions.) | |||
<source lang="python"> | <source lang="python"> | ||
#!/usr/bin/python | |||
#-*- coding:utf-8 -*- | |||
import cgi | |||
import cgitb; cgitb.enable() | |||
from urllib import urlopen | |||
from BeautifulSoup import BeautifulSoup | |||
import os | |||
#url = "http://www.socialistworker.co.uk/section.php?id=19" | |||
#webpage = urlopen(url).read() | |||
## parse it with Beautiful Soup to extract p tags | |||
#soup = BeautifulSoup(webpage) | |||
## get content of the <a> tags inside <h4 class="hilihead"> | |||
#headingSoup = soup.findAll('h4', { "class" : "hilihead" }) | |||
## append slogan to a list | |||
#slogans = [] | |||
#for i in range(0,2): | |||
# slogan = headingSoup[i].contents[0].contents[0] | |||
# slogans.append(slogan) | |||
#mySlogan = slogans[0] | |||
mySlogan = "yo world" | |||
# make .ps with slogan in | |||
f = open("../../../urllib/placard.ps", "w") | |||
ps = """%! | |||
/Helvetica findfont 72 scalefont setfont | |||
10 600 moveto | |||
(""" + mySlogan + """) show | |||
showpage""" | |||
f.write(ps) | |||
f.close() | |||
print ps | |||
# convert to .pdf with a syscall | |||
command = "ps2pdf ../../../urllib/placard.ps ../../../urllib/placard.pdf" | |||
os.popen(command) | |||
# give user link to download pdf | |||
htmlHeader = """<!DOCTYPE html> | |||
<html> | |||
<head> | |||
<style type="text/css"> | |||
body {background-color: #333;} | |||
div {width:800px; margin:20px auto 40px auto; padding: 100px;border:1px solid #bbb;font-size: 900%; line-height:90%;text-transform:uppercase;font-weight:bold;text-align:center; font-family: Arial, Helvetica, sans-serif;} | |||
a {text-decoration: none; color: #fff;} | |||
</style> | |||
</head> | |||
<body>""" | |||
htmlFooter = """ | |||
</body> | |||
</html>""" | |||
print "Content-Type: text/html" | |||
print | |||
print htmlHeader | |||
print "<div>" | |||
print "<a href='../../../urllib/placard.pdf'>MAKE ME A PLACARD</a>" | |||
print "</div>" | |||
print htmlFooter | |||
</source> | </source> |
Revision as of 17:47, 12 November 2012
No time to make a placard for that demo? Generate one from the latest slogans courtesy of Socialist Worker:
http://pzwart3.wdka.hro.nl/~egreenhalgh/urllib/socialistScrape1.html
Media still peddle lies
Get yr slogans
Scrape slogans from SW
#!/usr/bin/python
#-*- coding:utf-8 -*-
from urllib import urlopen
from BeautifulSoup import BeautifulSoup
url = "http://www.socialistworker.co.uk/section.php?id=19"
webpage = urlopen(url).read()
# parse it with Beautiful Soup to extract p tags
soup = BeautifulSoup(webpage)
# get content of the <a> tags inside <h4 class="hilihead">
headingSoup = soup.findAll('h4', { "class" : "hilihead" })
# print text within first two h4 tags
#for i in range(0,2):
# print headingSoup[i].contents[0].contents[0]
# append slogans to a list for later use
slogans = []
for i in range(0,2):
slogan = headingSoup[i].contents[0].contents[0]
slogans.append(slogan)
print slogans
web-only implementation
Look at it here: http://pzwart3.wdka.hro.nl/~egreenhalgh/urllib/socialistScrape1.html Scrapes slogans & displays them to the user in the browser. Will eventually have a 'print' button to generate a pdf file.
.html
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
body {background-color: #333;}
div {width:800px; margin:20px auto 40px auto; padding: 100px;border:1px solid #bbb;color: #fff; font-size: 900%; line-height:90%;text-align:center; font-family: Arial, Helvetica, sans-serif;
</style>
</head>
<body>
<div>
<span style="font-size: 100px; font-weight: bold;">
Need a placard? Get one here.
</span>
<br />
<form action="../cgi-bin/urllib/scrapedPlacards/socialistScrape1.cgi" name="inputForm">
<input type="submit" value="Get placard!">
</form>
</div>
</body>
</html>
.cgi
#!/usr/bin/python
#-*- coding:utf-8 -*-
import cgi
import cgitb; cgitb.enable()
from urllib import urlopen
from BeautifulSoup import BeautifulSoup
url = "http://www.socialistworker.co.uk/section.php?id=19"
webpage = urlopen(url).read()
# parse it with Beautiful Soup to extract p tags
soup = BeautifulSoup(webpage)
# get content of the <a> tags inside <h4 class="hilihead">
headingSoup = soup.findAll('h4', { "class" : "hilihead" })
# print text within first two h4 tags
#for i in range(0,2):
# print headingSoup[i].contents[0].contents[0]
# append text to a list for later use
slogans = []
for i in range(0,2):
slogan = headingSoup[i].contents[0].contents[0]
slogans.append(slogan)
# print one of them onscreen
htmlHeader = """<!DOCTYPE html>
<html>
<head>
<style type="text/css">
body {background-color: #333;}
div {background-color:#fff;width:800px; margin:20px auto 40px auto; padding: 100px;border:1px solid #bbb;font-size: 900%; line-height:90%;text-transform:uppercase;font-weight:bold;text-align:center; font-family: Arial, Helvetica, sans-serif;}
</style>
</head>
<body>"""
htmlFooter = """
</body>
</html>"""
print "Content-Type: text/html"
print
print htmlHeader
print "<div>"
print slogans[0]
print "</div>"
print htmlFooter
making PDFs
Anyone know a good way of making nice looking pdfs?
The internets suggested making a .ps file and using Ghostscript's ps2pdf function to convert to .pdf.
generate a .ps file
This contains instructions on fonts etc.
%!
/Helvetica findfont 300 scalefont setfont
300 300 moveto
(Hello, world!) show
showpage
convert to .pdf
In bash, do something like this:
ps2pdf test.ps test.pdf
This also works:
find . -type f -name "*.ps" | while read ONELINE; do ps2pdf "$ONELINE" "$(echo "$ONELINE" | sed 's/.ps/.pdf/g')"; done
example of browser-based pdf generation
Go here, click link, get your custom placard: http://pzwart3.wdka.hro.nl/~egreenhalgh/cgi-bin/urllib/scrapedPlacards/socialistScrapePdf.cgi
(not working atm because www-data not able to write files - asked evo to change permissions.)
#!/usr/bin/python
#-*- coding:utf-8 -*-
import cgi
import cgitb; cgitb.enable()
from urllib import urlopen
from BeautifulSoup import BeautifulSoup
import os
#url = "http://www.socialistworker.co.uk/section.php?id=19"
#webpage = urlopen(url).read()
## parse it with Beautiful Soup to extract p tags
#soup = BeautifulSoup(webpage)
## get content of the <a> tags inside <h4 class="hilihead">
#headingSoup = soup.findAll('h4', { "class" : "hilihead" })
## append slogan to a list
#slogans = []
#for i in range(0,2):
# slogan = headingSoup[i].contents[0].contents[0]
# slogans.append(slogan)
#mySlogan = slogans[0]
mySlogan = "yo world"
# make .ps with slogan in
f = open("../../../urllib/placard.ps", "w")
ps = """%!
/Helvetica findfont 72 scalefont setfont
10 600 moveto
(""" + mySlogan + """) show
showpage"""
f.write(ps)
f.close()
print ps
# convert to .pdf with a syscall
command = "ps2pdf ../../../urllib/placard.ps ../../../urllib/placard.pdf"
os.popen(command)
# give user link to download pdf
htmlHeader = """<!DOCTYPE html>
<html>
<head>
<style type="text/css">
body {background-color: #333;}
div {width:800px; margin:20px auto 40px auto; padding: 100px;border:1px solid #bbb;font-size: 900%; line-height:90%;text-transform:uppercase;font-weight:bold;text-align:center; font-family: Arial, Helvetica, sans-serif;}
a {text-decoration: none; color: #fff;}
</style>
</head>
<body>"""
htmlFooter = """
</body>
</html>"""
print "Content-Type: text/html"
print
print htmlHeader
print "<div>"
print "<a href='../../../urllib/placard.pdf'>MAKE ME A PLACARD</a>"
print "</div>"
print htmlFooter