#!/usr/bin/python
import urllib, os, random, ftplib
from BeautifulSoup import BeautifulStoneSoup
import Image
base_path = os.path.dirname(__file__)
download_dir = os.path.join(base_path,'source_images')
glitch_dir = os.path.join(base_path,'glitch_images')
min_offset = 2500
flat_file_db_path = os.path.join(base_path,'kittens_db.txt')
#------------------------------------------------------------------------
# utils
#------------------------------------------------------------------------
def get_random_points_in_file(file_content):
start_point = random.randint(min_offset,len(file_content))
end_point = start_point + random.randint(
0, len(file_content) - start_point)
return start_point, end_point
def post_to_tumblr(file_path):
title_chars = '______________________/|\\|/...*'
caption = ''.join([random.choice(title_chars) for x in range(random.randint(10,20))])
filename = file_path.split(os.path.sep)[-1]
s = ftplib.FTP(MY_FTP_SERVER,MY_FTP_USERNAME,MY_FTP_PASSWORD)
img_binary_data = open(file_path, 'rb')
s.storbinary('STOR MY_FTP_SERVER/ktngltchs/%s' % filename, img_binary_data)
src = "http://MY_FTP_SERVER/ktngltchs/%s" % filename
print src
post_data = urllib.urlencode(
{'email': MY_EMAIL_ADDRESS,
'type': 'photo',
'password': MY_PASSWORD,
'caption': caption,
'generator': 'kitten_glitches',
'source': src,
'group': MY_TUMBLR_BLOG
})
response = urllib.urlopen('http://www.tumblr.com/api/write', post_data)
print response, response.read()
#------------------------------------------------------------------------
# glitch methods
#------------------------------------------------------------------------
def repeat_section(file_content):
start_point, end_point = get_random_points_in_file(file_content)
section = file_content[start_point:end_point]
repeated = ''
for x in range(1,random.randint(1,5)):
repeated += section
return file_content[:start_point] + repeated + file_content[end_point:]
def splice_section_elsewhere(file_content):
start_point, end_point = get_random_points_in_file(file_content)
section = file_content[start_point:end_point]
repeated = ''
for x in range(1,random.randint(1,5)):
repeated += section
new_start_point, new_end_point = get_random_points_in_file(file_content)
return file_content[:new_start_point] + repeated + file_content[new_end_point:]
glitch_techniques = (repeat_section, splice_section_elsewhere)
#------------------------------------------------------------------------
# main
#------------------------------------------------------------------------
def make_kitten_glitch(url):
filename = url.split('/')[-1]
urllib.urlretrieve(url, os.path.join(download_dir, filename))
f = open(os.path.join(download_dir, filename), 'r')
file_content = f.read()
f.close()
for run_time in range(0,random.randint(2,20)):
file_content = random.choice(glitch_techniques)(file_content)
f = open(os.path.join(glitch_dir, filename), 'w')
f.write(file_content)
f.close()
im = Image.open(os.path.join(glitch_dir, filename))
im.save(os.path.join(glitch_dir, filename.replace('.jpg','.png')))
return os.path.join(glitch_dir, filename.replace('.jpg','.png'))
def find_kitten():
f = open(flat_file_db_path, 'r')
old_kittens = [x.strip() for x in f.readlines()]
f.close()
response = urllib.urlopen('http://api.flickr.com/services/feeds/photos_public.gne?tags=kittens&lang=en-us&format=rss_200').read()
soup = BeautifulStoneSoup(response)
img_list = []
for x in soup.findAll('media:thumbnail'):
img_url = dict(x.attrs)['url'].replace('_s.jpg','.jpg')
img_list.append(img_url)
random.shuffle(img_list)
for x in img_list:
if not x in old_kittens:
f = open(flat_file_db_path, 'a')
f.write(x + "\n")
f.close()
return x
f.close()
if __name__ == '__main__':
kitten_url = find_kitten()
if kitten_url:
kitten_path = make_kitten_glitch(kitten_url)
post_to_tumblr(kitten_path)
else:
print "no kittens"