[RPi] DeviantArt Picture frame
Så jag hade lite tråkigt denna fredagskväll och kom på att jag hade en RPi liggandes som inte gjorde ett skit, hade även en extra skärm som jag inte har behov av eller direkt vill slänga, en gammal 22" LCD med ok bild från 2008 eller något.
Så jag satt och tittade runt lite på vad man kunde hitta på med dessa och snubblade över ett litet projekt där någon gjort en dynamisk picture frame som tog sina bilder från deviantArt. Kanon tänkte jag och satte igång!
Märkte dock ganska snabbt att denna var halvdan om ens det (Originalet: http://theswitchtolinux.blogspot.se/2012/12/raspberry-pi-dail... ) så bestämde mig för att helt enkelt slänga ut hans gräsliga "scriptande" och göra något eget, speciellt som jag upptäckte att hans var buggat och att deviantArt stödjer MediaRSS med sökning och bläddring exponerat i RSS.
Lite kort vad det betyder är att du kan göra helt egna RSS sökningar i deras system precis som om du gjorde en sökning efter vissa bilder.
Så jag satte mig och klinkade ihop ett litet python script för att hämta hem bilder från deviantArt, det är inte det snyggaste eller snabbaste jag någonsin gjort men testat det en del och hittills fungerar det väldigt stabilt så jag tänkte att jag skulle dela med mig av det om någon får för sig att göra något liknande.
För att köra scriptet behövs följande python moduler
Setuptools https://pypi.python.org/pypi/setuptools
Feedparser https://pypi.python.org/pypi/feedparser
BeautifulSoup http://www.crummy.com/software/BeautifulSoup/
[QUOTE=Python scriptet]
#!/usr/bin/env python
import feedparser
import urllib
import re
import sys
from BeautifulSoup import BeautifulSoup
numberArgs = len(sys.argv) - 1
feedList = []
if numberArgs == 0:
feedList.append(feedparser.parse('http://backend.deviantart.com/rss.xml?q=special:dd'))
else:
n = 0
while n < numberArgs:
n = n + 1
appen = sys.argv[n]
print 'LOADING IN: ' + sys.argv[n]
feedList.append(feedparser.parse(appen))
countFeed = 0
print ''
for objects in feedList:
count = 0
print 'PROCESSING ' + feedList[countFeed].feed.title
for entry in feedList[countFeed]['entries']:
passed = 'true'
try:
linked = feedList[countFeed].entries[count].media_content
except:
passed = 'false'
if passed == 'true':
count = count + 1
img_url = str(BeautifulSoup(linked[0]['url']))
if re.search(r'.jpg', img_url):
img_name = re.findall(r'(?<=\/).*.jpg', img_url)
if re.search(r'.png', img_url):
img_name = re.findall(r'(?<=\/).*.png', img_url)
img_name = re.sub(r'.*\/', '', img_name[0])
img_loc = 'deviant/' + img_name
urllib.urlretrieve(img_url, img_loc)
print 'image found'
else:
print 'no media'
countFeed = countFeed + 1
[/QUOTE]
Installation:
Skapa ett nytt dokument i din home folder t.ex. deviantArt.py, kopiera scriptet ovan in i filen och spara.
Gör scriptet körbart med chmod +x deviantArt.py
Ta..da installerat.
Använding:
Scriptet har deviantArt Daily Deviations som standard så om du bara kör scriptet med
./deviantArt.py
kommer den automatiskt dra ner de bilderna och läga dem i en mapp som heter deviant.
Scriptet kan även hantera egna RSS byggen från deviantArt, lite mer info om hur de fungerar finns här https://www.deviantart.com/developers/rss
när du sedan byggt det / de rss feeds du vill köra från deviantArt, t.ex. om du vill ha från en speciell användare eller bara saker med grodor på osv så sedan är det bara köra scriptet på detta sättet
./deviant.py 'http://backend.deviantart.com/rss.xml?type=deviation&q=boost%...' 'hhttp://backend.deviantart.com/rss.xml?q=gallery%3Anamesjames'
sätt rss adresserna inom ' ' eller '' ", det finns ingen begränsning på hur många rss feed du kan använda det är bara slänga på dem, scriptet kan sedan smidigt kombineras med simpla bash script om man vill rensa ur sin mapp eller liknande, hur du sedan visar bilderna med din RPi går att läsa om i Original guiden.
Några frågor så är det bara att skriva, ska försöka lägga upp lite mer info och bilder på hur jag slitit ur panelen på LCD skärmen och när jag ev gör en snyggare ram till den m.m. om intresse finns.
"One is always considered mad, when one discovers something that others cannot grasp."
- Ed Wood