Pi Uploader | Uploading and Photoset population with Flickr

Here’s a video!

So now, when in Flickr Upload mode, the program will:

1. Walk through all Sub-Directories and find every image file

2. Upload all of those photos to Flickr

3. Get the photo ID’s of each of those photos and then index them into a list

4. Use that list to create a Photoset (Flickr’s equivalent of a Photo Album) named after the time the photos were uploaded.

As I said in the video, I want eventually (if the weather stays this bad, tomorrow) add email functionality to the program so it will send the user an email when all of the photos have been uploaded / the set of those photos.

Here’s the source used in the video:

#time setup
import time

#GPIO setup
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)

in_left = 11
GPIO.setup(in_left, GPIO.IN)
in_right = 13
GPIO.setup(in_right, GPIO.IN)
button = 16
GPIO.setup(button, GPIO.IN)

flickr_LED = 3
GPIO.setup(flickr_LED, GPIO.OUT)
both_LED = 5
GPIO.setup(both_LED, GPIO.OUT)
hdd_LED = 7
GPIO.setup(hdd_LED, GPIO.OUT)
uploading_LED = 26
GPIO.setup(uploading_LED, GPIO.OUT)
ready_LED = 24
GPIO.setup(ready_LED, GPIO.OUT)
stat_LED = 22
GPIO.setup(stat_LED, GPIO.OUT)

#for the cp command
import os
import os.path

#setup for datestamping folders
import time

#Flickr Setup
import flickrapi
api_key = '2bfb7e8be01e5f9f37e2e140076c6efa'
api_secret = 'fb4295ce55e7e0dd'
flickr = flickrapi.FlickrAPI(api_key, api_secret, format='json')
(token, frob) = flickr.get_token_part_one(perms='write')
if not token: raw_input("Press ENTER after you authorized this program")
flickr.get_token_part_two((token, frob))

#Storage Locations
sdcard = '/media/usb0/'
destination = '/media/usb0/'


#these functions will be filled later, but right now it's just a simple led blink
def flickr_upload():
	print "Uploading Photos To Flickr"
	GPIO.output(uploading_LED, True)
	GPIO.output(ready_LED, False)
	
	
	flickr_number = 0
	
	flickr_upload_list = []

	for path, subdirs, files in os.walk(sdcard):
		for filename in files:
			listfiles = os.path.join(path, filename)
			upload_response = flickr.upload(filename = listfiles, format='etree')
			upload_ID = upload_response.find('photoid').text
			flickr_upload_list.insert(flickr_number,upload_ID)
			
			print 'Photo ' + str(flickr_number) + ' uploaded' + ' ID: ' + upload_ID + ' : ' + str(flickr_upload_list[flickr_number])
			flickr_number = flickr_number + 1
	
	set_name = 'Uploaded At ' + time.strftime('%m-%d-%y_%H-%M-%S')
	
	print 'Creating Set: ' + set_name
	
	json_string = flickr.photosets_create(title=set_name, primary_photo_id=flickr_upload_list[0])
	set_id = json_string.split('"')[5]
	
	print 'Set Created: ' + set_id
	print 'Adding Files To list'
	
	for s in flickr_upload_list:
		flickr.photosets_addPhoto(photoset_id=set_id, photo_id=s)
		print 'Photo: ' + s + ' Added To Set: ' + set_id
	

	print "Flickr Upload Completed"
	GPIO.output(uploading_LED, False)
	GPIO.output(ready_LED, True)

def hdd_upload():
	print "Uploading Photos To the HDD"
	GPIO.output(uploading_LED, True)
	GPIO.output(ready_LED, False)
	
	print 'Creating Folder'
	
	foldername = time.strftime('%m-%d-%y_%H-%M-%S')
	os.system('mkdir ' + destination + foldername)
	
	print 'Folder Created: ' + destination + foldername
	
	hdd_number = 0
	
	for path, subdirs, files in os.walk(sdcard):
		for filename in files:
			hdd_number = hdd_number + 1
			listfiles = os.path.join(path, filename)
			print 'Copying File: ' + str(number) + ' ' + listfiles
			command = 'cp ' + listfiles + ' ' + destination + foldername
			print command
			os.system(command)

	print "HDD Upload Completed"
	GPIO.output(uploading_LED, False)
	GPIO.output(ready_LED, True)
	time.sleep(2)
	
def both_upload():
	print "Uploading Photos To Flickr and the HDD"
	GPIO.output(uploading_LED, True)
	GPIO.output(ready_LED, False)
	hdd_upload()
	flickr_upload()
	print "Double Upload Completed"
	GPIO.output(uploading_LED, False)
	GPIO.output(ready_LED, True)
		

while 1:
	
	GPIO.output(ready_LED, True)
	GPIO.output(uploading_LED, False)
	GPIO.output(stat_LED, False)
	
	if GPIO.input(in_left):
		#print "left"
		GPIO.output(flickr_LED, True)
		GPIO.output(both_LED, False)
		GPIO.output(hdd_LED, False)
		
	elif GPIO.input(in_right):
		#print "right"
		GPIO.output(flickr_LED, False)
		GPIO.output(both_LED, False)
		GPIO.output(hdd_LED, True)
		
	else:
		#print "mid"
		GPIO.output(flickr_LED, False)
		GPIO.output(both_LED, True)
		GPIO.output(hdd_LED, False)
		
	if GPIO.input(button):
			
		if GPIO.input(in_left):
			flickr_upload()
		elif GPIO.input(in_right):
			hdd_upload()
		else:
			both_upload()

1 Comment

  1. In my case I got an Error in line 75: set_id = json_string.split(‘”‘)[5]

    json_string is actually a bytearray. And I first converted it to string and used it:

    set_id = json_string.decode(‘utf8’).split(‘”‘)[5]

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.