ためしにやってみた。
成果物
情報源
手順
インストール
pip3 install feedparser
Collecting feedparser Using cached https://www.piwheels.org/simple/feedparser/feedparser-5.2.1-py3-none-any.whl Installing collected packages: feedparser Successfully installed feedparser-5.2.1
メタデータ表示
show_info.py
import feedparser print(feedparser.__version__) print(feedparser.__file__) print(dir(feedparser))
python3 get_feed.py
5.2.1 /home/pi/.local/lib/python3.5/site-packages/feedparser.py ['ACCEPTABLE_URI_SCHEMES', 'ACCEPT_HEADER', 'CharacterEncodingOverride', 'CharacterEncodingUnknown', 'EBCDIC_MARKER', 'FeedParserDict', 'NonXMLContentType', 'PREFERRED_XML_PARSERS', 'RESOLVE_RELATIVE_URIS', 'RE_DOCTYPE_PATTERN', 'RE_ENTITY_PATTERN', 'RE_SAFE_ENTITY_PATTERN', 'RE_XML_DECLARATION', 'RE_XML_PI_ENCODING', 'SANITIZE_HTML', 'SUPPORTED_VERSIONS', 'ThingsNobodyCaresAboutButMe', 'USER_AGENT', 'UTF16BE_MARKER', 'UTF16LE_MARKER', 'UTF32BE_MARKER', 'UTF32LE_MARKER', 'UndeclaredNamespace', 'ZERO_BYTES', '_BaseHTMLProcessor', '_FeedParserMixin', '_FeedURLHandler', '_HTMLSanitizer', '_LooseFeedParser', '_RelativeURIResolver', '_SGML_AVAILABLE', '_StrictFeedParser', '_StringIO', '_XML_AVAILABLE', '__author__', '__builtins__', '__cached__', '__contributors__', '__doc__', '__file__', '__license__', '__loader__', '__name__', '__package__', '__spec__', '__version__', '_base64decode', '_build_urllib2_request', '_convert_to_idn', '_cp1252', '_date_handlers', '_gen_georss_coords', '_geogCS', '_greek_date_format_re', '_greek_months', '_greek_wdays', '_hungarian_date_format_re', '_hungarian_months', '_iso8601_matches', '_iso8601_re', '_iso8601_tmpl', '_korean_am', '_korean_day', '_korean_month', '_korean_nate_date_re', '_korean_onblog_date_re', '_korean_pm', '_korean_year', '_l2bytes', '_makeSafeAbsoluteURI', '_maketrans', '_months', '_open_resource', '_parse_date', '_parse_date_asctime', '_parse_date_greek', '_parse_date_hungarian', '_parse_date_iso8601', '_parse_date_nate', '_parse_date_onblog', '_parse_date_perforce', '_parse_date_rfc822', '_parse_date_w3dtf', '_parse_georss_box', '_parse_georss_line', '_parse_georss_point', '_parse_georss_polygon', '_parse_poslist', '_parse_psc_chapter_start', '_resolveRelativeURIs', '_s2bytes', '_sanitizeHTML', '_urifixer', '_urljoin', '_xmlescape', 'base64', 'binascii', 'cgi', 'chardet', 'codecs', 'codepoint2name', 'collections', 'convert_to_utf8', 'copy', 'datetime', 'entitydefs', 'gzip', 'itertools', 'name2codepoint', 'parse', 're', 'registerDateHandler', 'replace_doctype', 'rfc822', 'sgmllib', 'struct', 'time', 'timezonenames', 'types', 'urllib', 'warnings', 'xml', 'zlib']
コード
任意RSSから項目を取得する。
import feedparser import datetime import sys if len(sys.argv) < 2: raise Error('第1引数にRSSのURLを指定してください。') exit() rss = sys.argv[1] entries = feedparser.parse(rss).entries print(len(entries)) for entry in entries: print(datetime.datetime .strptime(entry.published, '%a, %d %b %Y %H:%M:%S %z') .strftime('%Y-%m-%dT%H:%M:%SZ%z')) print(entry.link) print(entry.title) if 'content' in entry : print(entry.content) print()
公開日時、URL、タイトルが取得できた。本文はとれなかった。そもそもRSSに無かった。
Python日付を自動判別してくれず
様々な書式から自動的に日付型にしてほしい。これ、RSS元がテキストデータだし、書式も自由だから大変なことになりそう。サイトごとにフォーマット変えなきゃダメじゃんか……。変わったら対応しなきゃダメじゃんか……。ないわ。
日付の形式
Thu, 19 Sep 2019 12:53:49 +0900
曜日3, 日, 月3 年 時分秒 タイムゾーン
%a, %d %b %Y %H:%M:%S %z
ISO-8601のYYYY-mm-ddTHH:MM:SSZ
に統一してほしい。
RSSによっては存在する項目としない項目がある
この対応も面倒。サイトごとに変えなければならない。いちいち以下のようなif
文が必要とか。ないわ。
if 'キー名' in entry : print(entry.キー名)
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch 9.0 2018-11-13 ※
- bash 4.4.12(1)-release ※
- SQLite 3.29.0 ※
- MeCab 0.996ユーザ辞書
$ uname -a Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux