By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
439,972 Members | 1,454 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 439,972 IT Pros & Developers. It's quick & easy.

Random image downloader for newsgroups (first script)

P: n/a
Kim
Random image downloader for specified newsgroup. Hi I'm writing a small script that will download random images from a specified newsgroup. I've imported yenc into the script but I can't open the image or save it. This is my first script so be gentle!

Heres the script
####random group downloader####
import nntplib
import string, random
import mimetools
import StringIO
import rfc822
import sys, base64
import os
import email
import errno
import mimetypes
SERVER = "news.server.co.uk" #Insert news server here
GROUP = "alt.binaries.pictures.blah" #newsgroup will go here

# connect to server
server = nntplib.NNTP(SERVER)

resp, count, first, last, name = server.group(GROUP)

for i in range(10):
try:
id = random.randint(int(first), int(last))
resp, id, message_id, text = server.article(str(id))
except (nntplib.error_temp, nntplib.error_perm):
pass # no such message (maybe it was deleted?)
else:
break # found a message!
else:
raise SystemExit

text = string.join(text, "\n")
file = StringIO.StringIO(text)

msg = mimetools.Message(file)

#display message information
#print "File type", "=>", msg.gettype()
#print "Encoding", "=>", msg.getencoding()
#print "plist", "=>", msg.getplist()

message = rfc822.Message(file)

for k, v in message.items():
print k, "=", v

file = message.fp.read()

def yenc_decode(file):
# <i>find body</i>
while 1:
line = file.readline()
if not line:
return None
if line[:7] == "=ybegin":
break
# <i>extract data</i>
buffer = []
while 1:
line = file.readline()
if not line or line[:5] == "=yend":
break
if line[-2:] == "\r\n":
line = line[:-2]
elif line[-1:] in "\r\n":
line = line[:-1]
data = string.split(line, "=")
buffer.append(string.translate(data[0], yenc42))
for data in data[1:]:
data = string.translate(data, yenc42)
buffer.append(string.translate(data[0], yenc64))
buffer.append(data[1:])
return buffer
#the following should write to a text file
#inp = ("file","r")
#outp = open("text.txt","w")
#for line in file:
#outp.write(line)
#print file
#outp.close()

--------------= Posted using GrabIt =----------------
------= Binary Usenet downloading made easy =---------
-= Get GrabIt for free from http://www.shemes.com/ =-

Sep 7 '06 #1
Share this Question
Share on Google+
4 Replies


P: n/a
Kim schrieb:
SERVER = "news.server.co.uk" #Insert news server here
GROUP = "alt.binaries.pictures.blah" #newsgroup will go here
Just why do I imagine there will be an adult newsgroup in the end....?

SCNR,

Diez
Sep 7 '06 #2

P: n/a
SERVER = "news.server.co.uk" #Insert news server here
GROUP = "alt.binaries.pictures.blah" #newsgroup will go here

Just why do I imagine there will be an adult newsgroup in the end....?
I can see the freshmeat announcement now: "Random Boob Visualizer 1.0"...

Skip
Sep 7 '06 #3

P: n/a

Skip Montanaro wrote:
SERVER = "news.server.co.uk" #Insert news server here
GROUP = "alt.binaries.pictures.blah" #newsgroup will go here
Just why do I imagine there will be an adult newsgroup in the end....?

I can see the freshmeat announcement now: "Random Boob Visualizer 1.0"...

Skip
mmmmmm, boobs.

;-)

Sep 7 '06 #4

P: n/a
Kim wrote:
Random image downloader for specified newsgroup. Hi I'm writing a
small script that will download random images from a specified
newsgroup. I've imported yenc into the script but I can't open the
image or save it. This is my first script so be gentle!

Heres the script
####random group downloader####
import nntplib
import string, random
import mimetools
import StringIO
import rfc822
import sys, base64
import os
import email
import errno
import mimetypes
SERVER = "news.server.co.uk" #Insert news server here
GROUP = "alt.binaries.pictures.blah" #newsgroup will go here

# connect to server
server = nntplib.NNTP(SERVER)

resp, count, first, last, name = server.group(GROUP)

for i in range(10):
try:
id = random.randint(int(first), int(last))
resp, id, message_id, text = server.article(str(id))
except (nntplib.error_temp, nntplib.error_perm):
pass # no such message (maybe it was deleted?)
else:
break # found a message!
else:
raise SystemExit

text = string.join(text, "\n")
file = StringIO.StringIO(text)

msg = mimetools.Message(file)

#display message information
#print "File type", "=>", msg.gettype()
#print "Encoding", "=>", msg.getencoding()
#print "plist", "=>", msg.getplist()

message = rfc822.Message(file)

for k, v in message.items():
print k, "=", v

file = message.fp.read()

def yenc_decode(file):
# <i>find body</i>
while 1:
line = file.readline()
if not line:
return None
if line[:7] == "=ybegin":
break
# <i>extract data</i>
buffer = []
while 1:
line = file.readline()
if not line or line[:5] == "=yend":
break
if line[-2:] == "\r\n":
line = line[:-2]
elif line[-1:] in "\r\n":
line = line[:-1]
data = string.split(line, "=")
buffer.append(string.translate(data[0], yenc42))
for data in data[1:]:
data = string.translate(data, yenc42)
buffer.append(string.translate(data[0], yenc64))
buffer.append(data[1:])
return buffer
#the following should write to a text file
#inp = ("file","r")
#outp = open("text.txt","w")
#for line in file:
#outp.write(line)
#print file
#outp.close()
The following worked for me. It printed text and even
generated viewable images when I went to a pictures group.

I cleaned it up a little. I'm sure it can be cleaner. That's partly
because I didn't want to drift too far from your original and
partly because I don't get much Python practice.

Don't use "file" as a variable name, it overwrites the built in
file object. It likely didn't matter in this case, but would
eventually cause problems.

####random group downloader####
import nntplib
import random
import StringIO
import mimetools
import rfc822
import binascii
#import base64
#import sys
#import os
#import email
#import errno
#import mimetypes
SERVER = "news.server.co.uk" #Insert news server here
GROUP = "alt.binaries.pictures.blah" #newsgroup will go here

# connect to server
server = nntplib.NNTP(SERVER)

resp, count, first, last, name = server.group(GROUP)

for i in range(10):
try:
id = random.randint(int(first), int(last))
resp, id, message_id, text = server.article(str(id))
except (nntplib.error_temp, nntplib.error_perm):
pass # no such message (maybe it was deleted?)
else:
break # found a message!
else:
raise SystemExit

msgFile = StringIO.StringIO("\n".join(text))

# Display mime message information
msg = mimetools.Message(msgFile)
msgFile.seek(0)
print "File type", "=>", msg.gettype()
print "Encoding", "=>", msg.getencoding()
print "plist", "=>", msg.getplist()

# Display rfc822 message information
message = rfc822.Message(msgFile)
msgFile.seek(0)
for k, v in message.items():
print k, "=", v

yenc42 = "".join([chr((i - 42) & 255) for i in range(256)])
yenc64 = "".join([chr((i - 64) & 255) for i in range(256)])

def yenc_decode(fileIn):
# <i>find body</i>
while 1:
line = fileIn.readline()
if not line:
return None
if line[:7] == "=ybegin":
break
# <i>extract data</i>
buffer = []
while 1:
line = fileIn.readline()
if not line or line[:5] == "=yend":
break
if line[-2:] == "\r\n":
line = line[:-2]
elif line[-1:] in "\r\n":
line = line[:-1]
splitData = line.split("=")
buffer.append(splitData[0].translate(yenc42))
for data in splitData[1:]:
buffer.append(data[0].translate(yenc64).translate(yenc42))
buffer.append(data[1:].translate(yenc42))
return buffer

def uu_decode(fileIn):
# <i>find body</i>
while 1:
line = fileIn.readline()
if not line:
return None
if line[:6] == "begin ":
break
# <i>extract data</i>
buffer = []
while 1:
line = fileIn.readline()
if not line or line[:3] == "end":
break
buffer.append(binascii.a2b_uu(line))
return buffer

# Write the raw message to a text file
outp = open("text.txt","w")
for line in msgFile:
outp.write(line)
outp.close()
msgFile.seek(0)

# Find and convert a yencode or uu encode binary in the message.
image = yenc_decode(msgFile)
if image == None:
msgFile.seek(0)
image = uu_decode(msgFile)

# output the decoded binary data, if any
if image != None:
outp = open("text.jpg","wb")
outp.write("".join(image))
outp.close()

Sep 8 '06 #5

This discussion thread is closed

Replies have been disabled for this discussion.