ジャンル別新着アドオン
フォト
ビデオ
ミュージック
アドオンの詳細
アドオン名  Audio_Podcast
対象コンテンツ  Music
概要   オーディオポッドキャストを取得するアドオン
詳細説明   パラメータ「rss」に指定した オーディオポッドキャストを取得するアドオン。パラメータ「title」を変更することで表示される名前も変更可能です。
アドオンインストール用URL http://www.corockets.com/add_ons/fetch/16
ソースコード
 # -*- encoding: utf-8 -*-
# Audio Podcast
# Copyright Kazuto Maruoka All rights reserved.

import clr
clr.AddReferenceByPartialName("PresentationCore")
clr.AddReferenceByPartialName("PresentationFramework")
clr.AddReferenceByPartialName("WindowsBase")
clr.AddReferenceByPartialName("System.Xml")
clr.AddReferenceByPartialName("System.Configuration")
clr.AddReferenceByPartialName("coRockets")

from System import String, Int32, Uri, DateTime, TimeSpan, Exception
from System.IO import Stream, StreamReader, Path, DirectoryInfo
from System.Collections.Generic import List
from System.Collections.ObjectModel import Collection;
from System.Globalization import CultureInfo, DateTimeStyles
from System.Text.RegularExpressions import Regex, RegexOptions, Match
from System.Text import *
from System.Security import *
from System.Timers import Timer
from System.Net import WebRequest, WebResponse, WebClient, HttpRequestHeader
from System.Net.NetworkInformation import NetworkInterface
from System.Windows.Threading import DispatcherTimer;
from System.Xml import XmlDocument, XmlNode, XmlAttribute
from System.Configuration import ConfigurationManager, ConfigurationUserLevel
from CoRockets import Entry
from System.Diagnostics import *
from System.Text import *

def update():
	try:
		global rootEntry
		
		if not NetworkInterface.GetIsNetworkAvailable():
			return

		cacheDirectory = None
		config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

		if config.HasFile:
			if config.AppSettings.Settings["Cache"] != None:
				cacheDirectory = config.AppSettings.Settings["Cache"].Value
				di = DirectoryInfo(cacheDirectory)

				if di.Exists == False:
					di.Create()

		link = rss
		request = WebRequest.Create(link)
		response = request.GetResponse()
		s = response.GetResponseStream()

		doc = XmlDocument()
		doc.Load(s)

		entryList = List[Entry]()
		
		for postXmlNode in doc.SelectNodes("/rss/channel/item"):
			newEntry = Entry()

			for xmlNode in postXmlNode.ChildNodes:
				if xmlNode.Name.Equals("title"):
					newEntry.Title = xmlNode.InnerText
					
				elif xmlNode.Name.Equals("link"):
					newEntry.Link = Uri(xmlNode.InnerText)

				elif xmlNode.Name.Equals("author"):
					newEntry.Author = xmlNode.InnerText

				elif xmlNode.Name.Equals("enclosure"):
					for contentAttribute in xmlNode.Attributes:
						if contentAttribute.Name.Equals("url"):
							newEntry.Uri = Uri(contentAttribute.Value)
						elif contentAttribute.Name.Equals("type"):
							if contentAttribute.Value == "audio/mpeg":
								newEntry.CacheExtension = "mp3"

				elif xmlNode.Name.Equals("media:content"):
					for contentAttribute in xmlNode.Attributes:
						if contentAttribute.Name.Equals("url"):
							newEntry.Uri = Uri(contentAttribute.Value)
						elif contentAttribute.Name.Equals("type"):
							if contentAttribute.Value == "audio/mpeg":
								newEntry.CacheExtension = "mp3"

				elif xmlNode.Name.Equals("media:thumbnail"):
					for thumbnailAttribute in xmlNode.Attributes:
						if thumbnailAttribute.Name.Equals("url"):
							if String.IsNullOrEmpty(thumbnailAttribute.Value) != True:
								newEntry.ImageUri = Uri(thumbnailAttribute.Value)

				elif xmlNode.Name.Equals("description"):
					newEntry.Description = xmlNode.InnerText
				
				elif xmlNode.Name.Equals("pubDate"):
					try:
						newEntry.Updated = DateTime.ParseExact(xmlNode.InnerText, "ddd, dd MMM yyyy HH:mm:ss zz00", CultureInfo.InvariantCulture.DateTimeFormat, DateTimeStyles.None)
					except:
						pass
			if String.IsNullOrEmpty(newEntry.Title):
				newEntry.Title = "N/A"
			
			if newEntry.Uri != None:
				isExist = False
				for entry in rootEntry.ChildEntries:
					if entry.Uri == newEntry.Uri:
						isExist = True
				if isExist == False:
					entryList.Add(newEntry)

		if entryList.Count > 0:
			rootEntry.ImageUri = Uri("http://www.psypress.com/podcast/podcast-icon-small.gif")
			entryList.Reverse()
			for entry in entryList:
				rootEntry.InsertChild(0, entry)

		if s != None:
			s.Close()
			
		if response != None:
			response.Close()

	except Exception, e:
		Trace.WriteLine("Audio Podcast.py "+e)

def onUpdate(s, e):
	update()

rootEntry = None

for entry in Fetcher.Entries:
	if entry.Title.Equals(title):
		rootEntry = entry
		break

if rootEntry == None:
	rootEntry = Entry()
	rootEntry.Title = title
	rootEntry.Type = "Music"
	Fetcher.Entries.Add(rootEntry)

Fetcher.Update += onUpdate
      
作成日  2009-02-18 09:30:26
更新日  2010-09-05 09:17:03
過去の更新履歴 履歴を見る
初期設定パラメータ
パラメータ1:名前  rss パラメータ1:値  http://pipes.yahoo.com/pipes/pipe.run?_id=5Ju2awar3BGl1RQHiXrL0A&_render=rss&url=http%3A%2F%2Fwww.trashmenagerie.com%2Fblog%2F
パラメータ2:名前  title パラメータ2:値  TRASH MENAGERIE
パラメータ3:名前   パラメータ3:値  
パラメータ4:名前   パラメータ4:値  
パラメータ5:名前   パラメータ5:値  
コメント
Name Wikl
URL http://cbcnlie.b-w-h.com
Comment Good post..

Name deviantART
URL http://lutwoif.9cy.com
Comment Good post, admin.

Name Xhizors
URL http://ufcwiexe.brmz.com
Comment Good post, admin.

Name Plornt
URL http://nfsiaoi.250m.com
Comment Good post, admin.

Name newklear
URL http://crqbzht.ez-sites.ws
Comment Good post, admin.