Editing Hildon Event Feed

Warning: You are not logged in. Your IP address will be recorded in this page's edit history.
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision Your text
Line 115: Line 115:
==Examples==
==Examples==
-
'''Adding an event'''
+
'''dbus-send'''
-
 
+
-
dbus-send
+
  dbus-send --print-reply --type=method_call --dest=com.maemo.eventFeed / com.maemo.eventFeed.addEvent string:'my_source' string:'My Source' string:'/path/to/my/icon.png' string:'My Event' string:'This is an event' array:string:'/path/to/image/one.png', '/path/to/image/two.png' string:'Event footer' string:'2012-10-01T16:00:08.000Z' string:'exec /path/to/my/script argument'
  dbus-send --print-reply --type=method_call --dest=com.maemo.eventFeed / com.maemo.eventFeed.addEvent string:'my_source' string:'My Source' string:'/path/to/my/icon.png' string:'My Event' string:'This is an event' array:string:'/path/to/image/one.png', '/path/to/image/two.png' string:'Event footer' string:'2012-10-01T16:00:08.000Z' string:'exec /path/to/my/script argument'
-
Python
+
'''Python'''
  import dbus
  import dbus
Line 137: Line 135:
  else:
  else:
     print 'Error adding event'
     print 'Error adding event'
-
 
-
'''Example Python script to retrieve YouTube videos and add them to the event feed'''
 
  #!/usr/bin/env python
  #!/usr/bin/env python
   
   
-
from __future__ import with_statement
 
  import urllib2
  import urllib2
  import simplejson
  import simplejson
  import dbus
  import dbus
-
import datetime
 
  import sys
  import sys
-
 
-
LAST_RUN_DATE_TIME_FILE = '/home/user/Event Feed/examples/YouTube/last_run.txt' # File to read/write serialized date/time when script was last run.
 
-
SCRIPT_FILE = '/home/user/Event\ Feed/examples/YouTube/get_youtube_videos' # Path to the script.
 
   
   
  def get_youtube_videos(query):
  def get_youtube_videos(query):
-
""" Retrieve YouTube videos and populate the Hildon Event Feed
+
    """Retrieve YouTube videos and populate the Hildon Event Feed
-
+
   
-
    Usage: get_youtube_videos [query]
+
        Usage: get_youtube_videos [query]
-
        """
+
    """
 +
    query = query.strip().replace('  ', ' ').replace(' ', '+')
 +
    video_feed = 'http://gdata.youtube.com/feeds/api/videos?v=2.1&max-results=20&alt=json&orderby=published&q='
 +
    video_fields = 'entry(media:group(media:title,media:thumbnail,media:description,media:credit,yt:uploaded,yt:videoid))'
 +
       
 +
    source_name = 'youtube' # Identifies the source of the events. Must be unique to the source.
 +
   
 +
    source_display_name = 'YouTube' # Display name for the source in the event feed UI.
 +
   
 +
    icon = 'https://lh4.googleusercontent.com/-4QDxins1Vgw/AAAAAAAAAAI/AAAAAAAAGYw/sM3FJY9Asl4/s250-c-k/photo.jpg' # Icon to be displayed in the event feed UI.
      
      
-
query = query.strip().replace(' ', '+')
+
    action = 'dbus:system com.nokia.osso_browser /com/nokia/osso_browser/request com.nokia.osso_browser load_url' # This will be called when the user taps on an item in the event feed. In this example, the video url is opened in the browser.
-
video_feed = 'http://gdata.youtube.com/feeds/api/videos?v=2.1&max-results=20&alt=json&orderby=published&q='
+
   
-
video_fields = 'entry(media:group(media:title,media:thumbnail,media:description,media:credit,yt:uploaded,yt:videoid))'
+
    refresh_action = 'exec python /home/user/MyDocs/scripts/get_youtube_videos' # This will be called when the user presses the 'Refresh' button in the event feed UI.
-
+
   
-
source_name = 'youtube_example' # Identifies the source of the events. Must be unique to the source.
+
    bus = dbus.SessionBus()
-
source_display_name = 'YouTube' # Display name for the source in the event feed UI.
+
    iface = dbus.Interface(bus.get_object('com.maemo.eventFeed', '/'), 'com.maemo.eventFeed') # Connect to event feed dbus object
-
icon = '/home/user/Event Feed/examples/YouTube/youtube_icon.png' # Icon to be displayed in the event feed UI.
+
   
-
action = 'dbus:system com.nokia.osso_browser /com/nokia/osso_browser/request com.nokia.osso_browser load_url' # This will be called when the user taps on an item in the event feed. In this example, the video url is opened in the browser.
+
    iface.addRefreshAction(source_name, refresh_action) # Add a refresh action to the event feed.
-
refresh_action = 'exec python %s %s' % (SCRIPT_FILE, query) # This will be called when the user presses the 'Refresh' button in the event feed UI.
+
-
+
-
bus = dbus.SessionBus()
+
-
iface = dbus.Interface(bus.get_object('com.maemo.eventFeed', '/'), 'com.maemo.eventFeed') # Connect to event feed dbus object
+
-
iface.addRefreshAction(source_name, refresh_action) # Add a refresh action to the event feed.
+
-
+
-
last_run = script_last_run() # Time when script was last run. Will be used to check against the date/time of each video in the feed.
+
-
+
-
result = urllib2.urlopen('%s%s&fields=%s' % (video_feed, query, video_fields)).read()
+
-
json_result = simplejson.loads(result)
+
-
+
-
try:
+
-
result = json_result['feed']
+
-
videos = result['entry']
+
-
except:
+
-
videos = []
+
-
print 'Error retrieving video feed'
+
-
+
-
for video in videos:
+
-
try:
+
-
group = video['media$group']
+
-
video_id = group['yt$videoid']['$t']
+
-
title = group['media$title']['$t']
+
-
description = group['media$description']['$t']
+
-
thumbnail = group['media$thumbnail'][3]['url']
+
-
thumbnail2 = group['media$thumbnail'][4]['url']
+
-
uploader = group['media$credit'][0]['$t']
+
-
upload_date = group['yt$uploaded']['$t']
+
-
+
-
try:
+
-
item_date_time = datetime.datetime.strptime(upload_date[0: upload_date.find('.')], '%Y-%m-%dT%H:%M:%S')
+
-
except:
+
-
print 'Cannot parse item date/time. Using default'
+
-
item_date_time = datetime.datetime.min
+
-
+
-
if item_date_time > last_run:
+
-
print iface.addEvent(source_name, source_display_name, icon, title, description, [thumbnail, thumbnail2], uploader, upload_date, '%s http://www.youtube.com/watch?v=%s' % (action, video_id))
+
-
+
-
except:
+
-
print 'Error processing video item'
+
-
+
-
set_script_last_run(datetime.datetime.now().strftime('%Y, %m, %d, %H, %M, %S'))
+
   
   
-
def script_last_run():
+
    result = urllib2.urlopen('%s%s&fields=%s' % (video_feed, query, video_fields)).read()
-
""" Read serialized date/time from last_run.txt. """
+
    json_result = simplejson.loads(result)
-
+
-
date_time_string = ''
+
-
last_run = datetime.datetime.min
+
-
+
-
try:
+
-
with open(LAST_RUN_DATE_TIME_FILE, 'r') as file:
+
-
date_time_string = file.read()
+
-
file.close()
+
-
+
-
if date_time_string != '':
+
-
try:
+
-
last_run = datetime.datetime.strptime(date_time_string, '%Y, %m, %d, %H, %M, %S')
+
-
except:
+
-
print 'Saved date/time in incorrect format. Using default'
+
-
+
-
except IOError:
+
-
print 'Cannot read date/time from file. Using default.'
+
-
+
-
return last_run
+
-
+
-
def set_script_last_run(date_time_string):
+
-
""" Serialize the date/time the script was last run to last_run.txt. """
+
   
   
-
try:
+
    try:
-
with open(LAST_RUN_DATE_TIME_FILE, 'w') as file:
+
        result = json_result['feed']
-
file.write(unicode(date_time_string))
+
        videos = result["entry"]
-
file.close()
+
    except:
-
except IOError:
+
        videos = []
-
print 'Cannot write date/time to file'
+
        print 'Error retrieving video feed'
 +
           
 +
    for video in videos:
 +
        try:
 +
            group = video['media$group']
 +
            video_id = group['yt$videoid']['$t']
 +
            title = group['media$title']['$t']
 +
            description = group['media$description']['$t']
 +
            thumbnail = group['media$thumbnail'][3]['url']
 +
            thumbnail2 = group['media$thumbnail'][4]['url']
 +
            uploader = group['media$credit'][0]['$t']
 +
            upload_date = group['yt$uploaded']['$t']
   
   
-
if __name__ == '__main__':
+
            print iface.addEvent(source_name, source_display_name, icon, title, description, [thumbnail, thumbnail2], uploader, upload_date, '%s http://www.youtube.com/watch?v=%s' % (action, video_id))
-
if len(sys.argv) == 2:
+
-
sys.exit(get_youtube_videos(sys.argv[1]))
+
-
else:
+
-
print 'Usage: get_youtube_videos [query]'
+
   
   
-
 
+
        except:
-
'''Example Python script to retrieve an RSS feed (default is latest TMO threads) and post new items to the event feed.
+
            print 'Error processing video item'
-
 
+
-
#!/usr/bin/env python
+
   
   
-
from __future__ import with_statement
 
-
import xml.dom.minidom as DOM
 
-
import urllib2
 
-
import dbus
 
-
import re
 
-
import datetime
 
-
import sys
 
-
 
-
LAST_RUN_DATE_TIME_FILE = '/home/user/Event Feed/examples/RSS Feed/last_run.txt' # File to read/write serialized date/time when script was last run.
 
-
SCRIPT_FILE = '/home/user/Event\ Feed/examples/RSS\ Feed/get_rss_feed' # Path to the script.
 
-
 
-
def get_rss_feed(feed = 'http://talk.maemo.org/external.php?type=RSS2'):
 
-
""" Retrieve the RSS feed (default is latest TMO threads) and post events to the Hildon Event Feed. """
 
-
 
-
source_name = 'rss_feed_example' # Source of the events
 
-
display_name = 'RSS Feed' # Source name displayed in the event feed UI
 
-
icon = '/usr/share/icons/hicolor/64x64/hildon/general_rss.png' # Icon for the events in the UI
 
-
action = 'dbus:system com.nokia.osso_browser /com/nokia/osso_browser/request com.nokia.osso_browser load_url' # This will be called when the user taps on an item in the event feed. In this example, the link is opened in the browser.
 
-
refresh_action = 'exec python %s %s' % (SCRIPT_FILE, feed) # When this refresh action is added, the script will be called again (with same feed) when the 'Refresh' button is pressed in the event feed UI.
 
-
 
-
bus = dbus.SessionBus()
 
-
iface = dbus.Interface(bus.get_object('com.maemo.eventFeed', '/'), 'com.maemo.eventFeed') # Get the event feed dbus object
 
-
iface.addRefreshAction(source_name, refresh_action) # Add the refresh action to the event feed.
 
-
 
-
last_run = script_last_run() # Time when script was last run. Will be used to check against the date/time of each item in the feed.
 
-
 
-
rss = urllib2.urlopen(feed).read()
 
-
doc = DOM.parseString(rss)
 
-
items = doc.getElementsByTagName('item')
 
-
 
-
link = ''
 
-
title = ''
 
-
body = ''
 
-
images = []
 
-
footer = ''
 
-
timestamp = ''
 
-
 
-
for item in items:
 
-
for node in item.childNodes:
 
-
nodeName = node.nodeName
 
-
 
-
if nodeName == 'link':
 
-
link = node.firstChild.data
 
-
elif nodeName == 'title':
 
-
title = node.firstChild.data
 
-
elif nodeName == 'description':
 
-
body = node.firstChild.data
 
-
elif nodeName == 'dc:creator':
 
-
footer = node.firstChild.data
 
-
elif nodeName == 'pubDate':
 
-
timestamp = node.firstChild.data
 
-
elif nodeName == 'content:encoded':
 
-
images = get_images(node.firstChild.data)
 
-
 
-
try:
 
-
item_date_time = datetime.datetime.strptime(timestamp[0:timestamp.rfind(' ')], '%a, %d %b %Y %H:%M:%S')
 
-
except:
 
-
print 'Cannot parse item date/time. Using default'
 
-
item_date_time = datetime.datetime.min
 
-
 
-
if item_date_time > last_run:
 
-
print iface.addEvent(source_name, display_name, icon, title, body, images, footer, timestamp, '%s %s' % (action, link)) # If item is new, add an event to the event feed and print the reply.
 
-
 
-
set_script_last_run(datetime.datetime.now().strftime('%Y, %m, %d, %H, %M, %S'))
 
-
 
-
def script_last_run():
 
-
""" Read serialized date/time from last_run.txt. """
 
-
 
-
date_time_string = ''
 
-
last_run = datetime.datetime.min
 
-
 
-
try:
 
-
with open(LAST_RUN_DATE_TIME_FILE, 'r') as file:
 
-
date_time_string = file.read()
 
-
file.close()
 
-
 
-
if date_time_string != '':
 
-
try:
 
-
last_run = datetime.datetime.strptime(date_time_string, '%Y, %m, %d, %H, %M, %S')
 
-
except:
 
-
print 'Saved date/time in incorrect format. Using default'
 
-
 
-
except IOError:
 
-
print 'Cannot read date/time from file. Using default.'
 
-
 
-
return last_run
 
-
 
-
def set_script_last_run(date_time_string):
 
-
""" Serialize the date/time the script was last run to last_run.txt. """
 
-
 
-
try:
 
-
with open(LAST_RUN_DATE_TIME_FILE, 'w') as file:
 
-
file.write(unicode(date_time_string))
 
-
file.close()
 
-
except IOError:
 
-
print 'Cannot write date/time to file'
 
-
 
-
def get_images(content):
 
-
""" Try to extract image links from the content:encoded node. """
 
-
 
-
images = re.findall('http://[^\s]+jpg|http://[^\s]+png', content)
 
-
 
-
if len(images) > 2:
 
-
images = images[0:2]
 
-
 
-
return images
 
-
 
  if __name__ == '__main__':
  if __name__ == '__main__':
-
if len(sys.argv) > 1:
+
    if len(sys.argv) == 2:
-
sys.exit(get_rss_feed(sys.argv[1]))
+
        sys.exit(get_youtube_videos(sys.argv[1]))
-
else:
+
    else:
-
sys.exit(get_rss_feed())
+
        print 'Usage: get_youtube_videos [query]'
-
+
 
-
[[User:marxian|marxian]] 15:09, 4 October 2012 (UTC)
+
[[User:marxian|marxian]] 15:43, 1 October 2012 (UTC)

Learn more about Contributing to the wiki.


Please note that all contributions to maemo.org wiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see maemo.org wiki:Copyrights for details). Do not submit copyrighted work without permission!


Cancel | Editing help (opens in new window)