-
-
Save Jarvl/3799acac27283f80641d57804faac9ae to your computer and use it in GitHub Desktop.
#!/usr/bin/env python | |
import flickrapi | |
import requests | |
import os | |
import re | |
FLICKR_KEY = "your api key" | |
FLICKR_SECRET = "your api secret" | |
USER_ID = "your user id" | |
SET_ID = "the set (album) id" | |
def make_url(photo): | |
# url_template = "http://farm{farm-id}.staticflickr.com/ | |
# {server-id}/{id}_{secret}_[mstzb].jpg" | |
photo['filename'] = "%(id)s_%(secret)s_z.jpg" % photo | |
url = ("http://farm%(farm)s.staticflickr.com/%(server)s/%(filename)s" | |
% photo) | |
return url, photo['filename'] | |
def main(): | |
#get new imaged from flickr | |
print " ---> Requesting photos..." | |
count = 0 | |
update = False | |
flickr = flickrapi.FlickrAPI(FLICKR_KEY, FLICKR_SECRET) | |
photos = flickr.walk_set(SET_ID) | |
for photo in photos: | |
count += 1 | |
url, filename = make_url(photo.attrib) | |
path = '/home/pi/photoframe/flickr/%s' % filename | |
try: | |
image_file = open(path) | |
print " ---> Already have %s" % url | |
except IOError: | |
print " ---> Downloading %s" % url | |
r = requests.get(url) | |
image_file = open(path, 'w') | |
image_file.write(r.content) | |
image_file.close() | |
update = True | |
#check to see if it needs to remove photos from folder | |
filelist = os.listdir("/home/pi/photoframe/flickr") | |
if count < len(filelist): | |
print " ---> Removing photos" | |
for f in filelist: | |
pics = flickr.walk_set(SET_ID) | |
print f | |
for pic in pics: | |
url, filename = make_url(pic.attrib) | |
matchObj = re.match(f, filename) | |
if matchObj: | |
print " ---> Found %s, matched %s" %(f,filename) | |
break | |
else: | |
print " ---> Deleting %s" %f | |
os.remove("/home/pi/photoframe/flickr/%s" %f) | |
update = True | |
#if it added or removed a photo, update slideshow | |
if update == True: | |
print " ---> Restarting slideshow" | |
os.system("killall feh && /home/pi/bin/script_slideshow.sh") | |
if __name__ == '__main__': | |
main() |
#!/bin/bash | |
export DISPLAY=:0.0 | |
XAUTHORITY=/home/pi/.Xauthority | |
feh -q -Z -F -z -Y -D 5 /home/pi/photoframe/flickr |
Would recommend opening the file as binary, which allows this to work on Windows-based box too. My tests were on a Windows Python installation which caused corrupt jpgs to be downloaded until I added the binary flag 'b'
Line 39:
image_file = open(path, 'wb')
Does anyone have an idea how to retrieve images from a personal photostream (and not just a Set or specific Album)?
The general feed allows you to use Ifttt.com to push new Instagram images to Flickr (https://ifttt.com/recipes/392-automatically-share-your-new-instagram-photos-to-flickr) which has a far easier implementation for photo frames implementations. The photo frame can then display most recent Instagram photos (Instagram seem to have closed their APIs for external app integrations)
Everytime I try to run these commands:
export DISPLAY=:0.0
XAUTHORITY=/home/pi/.Xauthority
feh -q -Z -F -z -Y -D 5 /home/pi/photoframe/flickr
I get the error below:
feh ERROR: CAn't open X display. It *is* running, yeah?
Any suggestions would be much appreciated!
-Pi & Linux Newbie
My Pi isn't pulling in my photos from Flickr or booting into full screen mode