Python(Ver 2.7)でfeedparserを使ってRSSリーダーを作った。
インストール編
ダラダラ解説編
「...」はタブを表す。
# -*- coding: utf-8 -*-
#インポート
import feedparser
import win32com.client
import datetime
import time
#開くExcelの設定
#Excelファイル名は「RSS.xlsm」、最終行を取得するマクロのプロシージャ名は「GetLastRow」とする。
#シート1ページ目に取得した更新情報、2ページ目にRSSのURL一覧を入力する
xl = win32com.client.Dispatch(“Excel.Application”)
book = xl.Workbooks(u”RSS.xlsm”)
xl.Run(u”RSS.xlsm!GetLastRow”)
Sheet_Top = book.Worksheets(1)
Sheet_URL = book.Worksheets(2)
#前回の更新情報を取得した時間を変数に格納する。
#シート2ページ目のセルD1に日時、セルD2に前回取得した時間を入力している。
#セルD1には日付を入れているが、なぜか00:00:00が加わるためstrftimeで日付だけ抽出する。
D = time.strptime( str( Sheet_URL.cells(1, 4).Value ), “%m/%d/%y %H:%M:%S”)
Prev_Day = time.strftime(“%Y/%m/%d”, D)
D = time.strptime( str( Sheet_URL.cells(2, 4).Value ), “%H:%M:%S”)
Prev_Time = time.strftime(“%H:%M:%S”, D)
#シート2ページ目のA列にサイト名、B列にRSSのURLが入力されている。
#URLの行はiで、Excelの最終行はi3とする。
#ValはExcelのi行目のサイト名であり、これが空白ではない限り(Noneではない限り)URLを順に読み込んで処理を行っていく。
i = 1
i3 = int( Sheet_URL.cells(3, 4).Value ) + 1
Val = Sheet_URL.cells(i, 1).Value
while Val != None :
#feedparserにExcelのRSSのURLを入力していく。
...URL = Sheet_URL.cells(i, 2).Value
...Result = feedparser.parse(URL)
#変数ResultにRSSの情報が配列で格納されたので、配列数を数え(lenメソッド)、順に更新時間を取得していく(最後にExcelに取得した日付より前か後かを比較するため)
#+0900および+09:00は、処理で使わないため、+0000および+00:00に置換する。
#置換しなくても回避できるかもしればいが、自分の技術力ではstrptimeが使えない
...for i2 in range( len(Result.entries) ) :
......if “?xml” not in Val and “rdf” not in Val :
.........T = Result.entries[i2].updated.replace(“+0900″,”+0000”)
.........T = time.strptime(T, “%a, %d %b %Y %H:%M:%S +0000”)
......else :
.........T = Result.entries[i2].updated.replace(“+09:00″,”+00:00”)
.........T = time.strptime(T, “%Y-%m-%dT%H:%M:%S+00:00”)
#置換した結果Tから、記事の更新日付と時間をそれぞれ抽出する。
......T_Day = time.strftime(“%Y/%m/%d”, T)
......T_Time = time.strftime(“%H:%M:%S”, T)
#シート2ページ目の前回取得日時と比較し、前回取得の日時以降の更新なら、サイト名、記事タイトル、記事URL、更新日、更新時間を取得する。
#取得してセルに入力したら、最終行i3を次の行にする。
......if Prev_Day == T_Day and Prev_Time <= T_Time :
.........Sheet_Top.cells(i3, 1).Value = Result.feed.title
.........Sheet_Top.cells(i3, 2).Value = Sheet_URL.cells(i, 4).Value
.........Sheet_Top.cells(i3, 3).Value = Result.entries[i2].title
.........Sheet_Top.cells(i3, 4).Value = Result.entries[i2].link
.........Sheet_Top.cells(i3, 5).Value = T_Day
.........Sheet_Top.cells(i3, 6).Value = T_Time
.........i3 = i3 + 1
......elif Prev_Day < T_Day :
.........Sheet_Top.cells(i3, 1).Value = Result.feed.title
.........Sheet_Top.cells(i3, 2).Value = Sheet_URL.cells(i, 4).Value
.........Sheet_Top.cells(i3, 3).Value = Result.entries[i2].title
.........Sheet_Top.cells(i3, 4).Value = Result.entries[i2].link
.........Sheet_Top.cells(i3, 5).Value = T_Day
.........Sheet_Top.cells(i3, 6).Value = T_Time
.........i3 = i3 + 1
#配列の全ての更新時間(配列内の番号は変数i2)が終わったら、次のURL(Excelのi行目)に行く。
#i行目のサイト名が空白(None)かどうか判定するため、Valで取得しなおす。
...i = i + 1
...Val = Sheet_URL.cells(i, 1).Value
#ExcelのすべてのRSSの更新記事取得が終わったら、現在時刻を取得し、シート2ページ目のセルD1、D2に入力する。
Dt_Now = datetime.datetime.now()
Dt_Today = Dt_Now.strftime(“%Y/%m/%d”)
Dt_Time = Dt_Now.strftime(“%H:%M:%S”)
Sheet_URL.cells(1, 4).Value = Dt_Today
Sheet_URL.cells(2, 4).Value = Dt_Time