よちよちpython

独習 python/Qpython/Pydroid3/termux/Linux

PythonでRSSフィードを取得しニュースをかき集めるアプリをつくる

Twitterをやめてしまいましたので巷にあふれるコンテンツや情報がピタリと入って来なくなりました。
情報過多の洪水からの疲弊は免れたものの、何かひとつ寂しいものがございます。
そういうわけで、RSSフィードなるものを取得してみようじゃないのという次第。

【作成するプログラムの実行風景】
PCで実行中
実行するとメニュー番号を表示

f:id:chayarokurokuro:20191123135104p:plain


メニュー番号を入力すると

f:id:chayarokurokuro:20191123135130p:plain


ネットからRSSフィード取得し表示

f:id:chayarokurokuro:20191123135157p:plain



スマホで実行中

f:id:chayarokurokuro:20191123135304j:plain


f:id:chayarokurokuro:20191123135432j:plain



目次




実行環境


Windows10
JupyterLab
Python3.7


Andoroidスマホ
termux
Python3.7



RSSとはなあに?


RSSとは、ブログやオンラインマガジンなど、お気に入りのWebサイトの最新情報を効率よく入手する方法だそうです。
「Really Simple Syndication」「Rich Site Summary」などの略語で、XML形式で記述されたフォーマットでサイトより配信されます。
RSSを読み込む専用リーダーにWebサイトのRSSフィードURLを登録しておくと、そのWebの更新情報や最新情報が自動的に取得できる。
取得できるのは各Webサイトで少しずつ違うようですが、だいたい更新日付、記事のタイトル、記事の要約や中身など。
要するに、ブラウザであちらこちらのWebサイトを開き回らなくとも済むわけですね。
Twitterでフォローしておけば書き込みがタイムラインに流れてくるのと似ていますかね。
また、RSSにはRSS1.0とRSS2.0の仕様が異なるフォーマットのバージョンがあります。RSS勢が仕様をどうするかを揉めていた時に別勢力がAtomというフォーマットを作って標準化させようとしたということでまたそれも若干異なっているようですが、詳しいことは分からないので放置プレイです。
RSS、atomの仕様をまとめる - Qiita 参照。



RSSの現状


効率的に情報収集できて大変便利そうなツールでありますが、SNS等の普及に伴って衰退傾向だそうです。
SNSだとポジティブに情報拡散できますし広まるスピードも早い。SNS以外にも、まとめサイトやキュレーションサイトのサービスが出てきており、情報を体系化して提供されてもおりますのでそれにおされて10年ほど前の2005年頃をピークに現在はその頃の4分の1ほどの利用率だといいます。



とはいうものの


ゴリ押しで攻めてくる新手のポジティブ情報拡散ツールに疲れてRSSに回帰する人もいるようでございますし、今回ツールを作ってみて便利だと思いましたので全然アリかなと思いました。
ということで、レッツ・プログラミンッ!



つくるものと必要なもの


  • RSSのURL
  • URLにアクセスしてRSSを取得し表示するPythonアプリ
  • RSSをパースするPython用ライブラリfeedparser



まずはfeedparserのインストール


RSSをパースするライブラリをインストールします。

pip install feedparser



お気に入りWebサイトのRSSをかき集める


大抵のWebサイトではそれぞれでRSS用のURLを用意してあります。
たとえばはてなブログでしたら「ブログのドメイン」に/rssを付けたものになっています。このブログの場合はhttps://chayarokurokuro.hatenablog.com/rss
ブラウザでアクセスすると先頭に「xml version なんとか rss version なんとか」みたいなのから始まるソースが表示されます。
RSS」でネット検索すればURLが見つかると思います。

適当に集めたURLを貼っておきます。辞書形式にしております。{タイトル:URL}



menu = {
        "my_blog":"http://chayarokurokuro.hatenablog.com/rss",
        "YahooNewsHeadlines":"https://headlines.yahoo.co.jp/rss/all-c_sci.xml",
        "はてなブロググループプログラミング":"https://hatenablog.com/g/11696248318754550880/feed",
        "はてなブロググループ歴史":"https://hatenablog.com/g/11696248318754550904/feed",
        'はてなブロググループ読書':'https://hatenablog.com/g/11696248318754550864/feed',
        'はてなブロググループバイク':'https://hatenablog.com/g/11696248318754550871/feed',
        'はてなブロググループ知識': 'https://hatenablog.com/g/11696248318754550903/feed',
        "youtube_Jazz":"https://www.youtube.com/feeds/videos.xml?user=jazznbluesexperience",
        "ラジオ日経競馬実Web":"http://keiba.radionikkei.jp/keiba/rss2/index.xml",
        "google_japan_news":"https://news.google.com/news/rss/headlines/section/geo/japan",
        "jra中央競馬":"http://www.jra.go.jp/rss/jra-info.rdf",
        "日本銀行":"https://www.boj.or.jp/rss/whatsnew.xml",
        "日本銀行統計":"https://www.boj.or.jp/rss/statistics.xml",
        "気象庁":"https://www.jma-net.go.jp/rss/jma.rss",
        "天気プラザ長崎":"http://tenki.wet.co.jp/forecast/day01ngs.rdf",
        "経済リポート.com雇用人材労働":"http://xml.keizaireport.com/rss/node_18.xml",
        "経済リポート.comネットビジネス":"http://xml.keizaireport.com/rss/node_89.xml",
        "経済リポート.comウェブ技術":"http://xml.keizaireport.com/rss/node_91.xml",
        "JPXmarket_news":"https://www.jpx.co.jp/rss/markets_news.xml",
        "JPX売買停止情報":"https://www.jpx.co.jp/rss/equities-suspended.xml",
        "株価アルゴリズム":"http://rizumunet.blog.jp/index.rdf",
        "Yahooファイナンス株価予想":"https://info.finance.yahoo.co.jp/kabuyoso/rss/",
        "nikkei_Linux":"https://bizboard.nikkeibp.co.jp/b_servlet/PushServletAll?TEMPLATE_ENC=UTF-8&APPLICATION_XML=1&BZB_DATE_TOKEN=72dce95a0c8b88871ce49313a3b3d30da8fdfa91bf6e8138e8d771f29074920c&TEMPLATE=bizbo_rssm2444_pers.rdf",
        "twitter_rss_funassyi":"http://twitrss.me/mobile_twitter_to_rss/?user=funassyi",
        "twitter_rss_kenichiromogi":"http://twitrss.me/mobile_twitter_to_rss/?user=kenichiromogi",
        "twitter_rss_ks_1013":"http://twitrss.me/mobile_twitter_to_rss/?user=ks_1013",
        "twitter_rss_gloomynews":"http://twitrss.me/mobile_twitter_to_rss/?user=gloomynews",
        "twitter_rss_PythonSoftwareFoundation":"http://twitrss.me/mobile_twitter_to_rss/?user=ThePSF",
        "nhk主要ニュース":"https://www.nhk.or.jp/rss/news/cat0.xml",
        "nhk社会":"https://www.nhk.or.jp/rss/news/cat1.xml",
        "nhk科学医療":"https://www.nhk.or.jp/rss/news/cat3.xml",
        "nhk政治":"https://www.nhk.or.jp/rss/news/cat4.xml",
        "nhk経済":"https://www.nhk.or.jp/rss/news/cat5.xml",
        "nhk国際":"https://www.nhk.or.jp/rss/news/cat6.xml",
        "nhkスポーツ":"https://www.nhk.or.jp/rss/news/cat7.xml",
        "nhk文化エンタメ":"https://www.nhk.or.jp/rss/news/cat2.xml",
        "nhkライブニュース":"https://www.nhk.or.jp/rss/news/cat-live.xml",
        "gihyo技術評論社":"https://gihyo.jp/feed/rss2",
        "itmedia":"https://rss.itmedia.co.jp/rss/2.0/itmedia_all.xml",
        "codezine":"https://codezine.jp/rss/new/20/index.xml",
        "publickey":"https://www.publickey1.jp/atom.xml",
        "gigazine":"https://gigazine.net/news/rss_2.0/",
        "techcrunch日本語版":"https://jp.techcrunch.com/feed/",
        "マイナビ全ジャンル":"https://news.mynavi.jp/rss/index.xml",
        "マイナビ開発エンジニア":"https://news.mynavi.jp/rss/business/enterprise/engineer.xml",
        "Qiita_Python":"http://qiita.com/tags/Python/feed",
        "Qiita_Linux":"http://qiita.com/tags/Linux/feed",
        "Qiita_MySQL":"http://qiita.com/tags/MySQL/feed",
        "Qiita_Git":"http://qiita.com/tags/Git/feed",
        "Qiita_GitHub":"http://qiita.com/tags/GitHub/feed",
        "Qiita_HTML5":"http://qiita.com/tags/HTML5/feed",
        "Qiita_機械学習":"http://qiita.com/tags/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92/feed",
        "Qiita_MachineLearning":"http://qiita.com/tags/MachineLearning/feed",
        "Qiita_JavaScript":"http://qiita.com/tags/JavaScript/feed",
        "Qiita_Bash":"http://qiita.com/tags/Bash/feed",
        "Qiita_Vim":"http://qiita.com/tags/Vim/feed",
        "Qiita_ShellScript":"http://qiita.com/tags/ShellScript/feed",
        "Qiita_初心者":"http://qiita.com/tags/%E5%88%9D%E5%BF%83%E8%80%85/feed",
        "Qiita_新人プログラマ応援":"http://qiita.com/tags/%E6%96%B0%E4%BA%BA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E5%BF%9C%E6%8F%B4/feed",
}


その他 RSSリンク集参考
JPX東京証券取引所 https://www.jpx.co.jp/rss/index.html
itmediaリンク https://corp.itmedia.co.jp/media/rss_list/
yahooファイナンス情報提供一覧 https://news.finance.yahoo.co.jp/cp_list/
経済リポート.com http://www3.keizaireport.com/category.php/rss/


はてなブロググループとQiitaはジャンルのURLの後ろに/feedを付ければRSSのURLになります。
Twitterのは公式のではなくてtwitrss.meという別個のRSSサービス会社のもの。http://twitrss.me/mobile_twitter_to_rss/?user=にアカウントの@の部分を付ければOK。



コーディング


ここからコードを書いていきます。


基本形は次のようなコード

import feedparser

# ヤフーニュースのヘッドラインRSS
url = "https://headlines.yahoo.co.jp/rss/all-c_sci.xml"

# 辞書型で取得
rss_dic = feedparser.parse(url)


実行すると辞書型のデータがモリモリ出てきます。

import feedparser

# ヤフーニュースのヘッドライン
url = "https://headlines.yahoo.co.jp/rss/all-c_sci.xml"

# 辞書型で取得
rss_dic = feedparser.parse(url)
print(rss_dic)

実行結果の出力は多いので省略。キーだけ取り出してみます。

print(rss_dic.keys())
dict_keys(['feed', 'entries', 'bozo', 'headers', 'href', 'status', 'encoding', 'version', 'namespaces'])

entriesの中身を取り出してみる。

print(rss_dic.entries)

これも実行結果の出力を省略します。
titleに記事のタイトル、linkに記事のURL、publishedに日付が入っているようなのでそれを取り出します。

rss_dic = feedparser.parse(url)
entries_data = rss_dic.entries
for i in (reversed(entries_data)):
    print(i.published)
    print("-"*44)
    print(i.title)
    print("-"*44)
    print(i.link)
    print("="*44)
Fri, 22 Nov 2019 23:01:00 +0900
--------------------------------------------
GeForce GTX 1650 SUPER搭載ビデオカードが各社から発売(Impress Watch)
--------------------------------------------
https://rdsig.yahoo.co.jp/rss/l/headlines/sci/impress/RV=1/RU=aHR0cHM6Ly9oZWFkbGluZXMueWFob28uY28uanAvaGw_YT0yMDE5MTEyMi0wMDAwMDE5OS1pbXByZXNzLXNjaQ--
============================================
Sat, 23 Nov 2019 00:30:00 +0900
--------------------------------------------
「Raspberry Pi 4 Model B」の海外版が店頭入荷、在庫はごく少量(Impress Watch)
--------------------------------------------
https://rdsig.yahoo.co.jp/rss/l/headlines/sci/impress/RV=1/RU=aHR0cHM6Ly9oZWFkbGluZXMueWFob28uY28uanAvaGw_YT0yMDE5MTEyMy0wMDAwMDAwMy1pbXByZXNzLXNjaQ--
============================================
Sat, 23 Nov 2019 06:05:04 +0900
--------------------------------------------
新生「OCN モバイル ONE」は格安SIMのシェア1位を奪還できるのか?(ITmedia Mobile)
--------------------------------------------
https://rdsig.yahoo.co.jp/rss/l/headlines/sci/zdn_m/RV=1/RU=aHR0cHM6Ly9oZWFkbGluZXMueWFob28uY28uanAvaGw_YT0yMDE5MTEyMy0wMDAwMDAxMy16ZG5fbS1zY2k-
============================================
Sat, 23 Nov 2019 07:00:00 +0900
--------------------------------------------
災害時「自動翻訳」に頼った結果……おかしな多言語に外国人が思うこと やさしい置き換えで終わりじゃない(withnews)
--------------------------------------------
https://rdsig.yahoo.co.jp/rss/l/headlines/sci/withnews/RV=1/RU=aHR0cHM6Ly9oZWFkbGluZXMueWFob28uY28uanAvaGw_YT0yMDE5MTEyMy0wMDAwMDAwMi13aXRobmV3cy1zY2k-
============================================
Sat, 23 Nov 2019 07:00:00 +0900
--------------------------------------------
クマムシの「激レアさん」追う理由、「調査は賭け。やめときなさい、俺がやるから」生物学者の執念(withnews)
--------------------------------------------
https://rdsig.yahoo.co.jp/rss/l/headlines/sci/withnews/RV=1/RU=aHR0cHM6Ly9oZWFkbGluZXMueWFob28uY28uanAvaGw_YT0yMDE5MTExOS0wMDAwMDAwNS13aXRobmV3cy1zY2k-
============================================
Sat, 23 Nov 2019 07:05:04 +0900
--------------------------------------------
SSDが人気だけどアキバでHDDの売れ筋は3TB? 4TB?(ITmedia PC USER)
--------------------------------------------
https://rdsig.yahoo.co.jp/rss/l/headlines/prod/zdn_pc/RV=1/RU=aHR0cHM6Ly9oZWFkbGluZXMueWFob28uY28uanAvaGw_YT0yMDE5MTEyMy0wMDAwMDAxNi16ZG5fcGMtcHJvZA--
============================================
Sat, 23 Nov 2019 07:30:06 +0900
--------------------------------------------
恋のために身も心も悪魔に捧げよ「ハイスコアガールII」20話 降り注ぎ続ける斬空波動拳(ねとらぼ)
--------------------------------------------
https://rdsig.yahoo.co.jp/rss/l/headlines/sci/it_nlab/RV=1/RU=aHR0cHM6Ly9oZWFkbGluZXMueWFob28uY28uanAvaGw_YT0yMDE5MTEyMy0wMDAwMDAxMC1pdF9ubGFiLXNjaQ--
============================================
Sat, 23 Nov 2019 08:04:41 +0900
--------------------------------------------
家も仕事も失った…HIVの偏見と差別、今も根強く(西日本新聞)
--------------------------------------------
https://rdsig.yahoo.co.jp/rss/l/headlines/sctch/nishinpc/RV=1/RU=aHR0cHM6Ly9oZWFkbGluZXMueWFob28uY28uanAvaGw_YT0yMDE5MTEyMy0wMDAxMDAwMC1uaXNoaW5wYy1zY3RjaA--
============================================
Sat, 23 Nov 2019 08:30:00 +0900
--------------------------------------------
Uber Air、空飛ぶ自動車でのライドシェアに向けソフトウェア面で1歩前進(ZDNet Japan)
--------------------------------------------
https://rdsig.yahoo.co.jp/rss/l/headlines/sci/zdnet/RV=1/RU=aHR0cHM6Ly9oZWFkbGluZXMueWFob28uY28uanAvaGw_YT0yMDE5MTEyMy0zNTE0NTI1Ny16ZG5ldC1zY2k-
============================================
Sat, 23 Nov 2019 09:00:00 +0900
--------------------------------------------
ロボットアニメのコックピット!? OKIが開発する人手不足解決ツール(BCN)
--------------------------------------------
https://rdsig.yahoo.co.jp/rss/l/headlines/prod/bcn/RV=1/RU=aHR0cHM6Ly9oZWFkbGluZXMueWFob28uY28uanAvaGw_YT0yMDE5MTEyMy0wMDE3MTAzNy1iY24tcHJvZA--
============================================
Sat, 23 Nov 2019 09:00:00 +0900
--------------------------------------------
神田明神で「Sansan名刺納め祭2019」。名刺スキャン代行や名刺祈祷(Impress Watch)
--------------------------------------------
https://rdsig.yahoo.co.jp/rss/l/headlines/sci/impress/RV=1/RU=aHR0cHM6Ly9oZWFkbGluZXMueWFob28uY28uanAvaGw_YT0yMDE5MTEyMy0wMDAwMDAwNi1pbXByZXNzLXNjaQ--
============================================
Sat, 23 Nov 2019 09:00:06 +0900
--------------------------------------------
2020年、新「Intel Optane」でメモリのストレージ化が加速(TechTargetジャパン)
--------------------------------------------
https://rdsig.yahoo.co.jp/rss/l/headlines/sci/zdn_tt/RV=1/RU=aHR0cHM6Ly9oZWFkbGluZXMueWFob28uY28uanAvaGw_YT0yMDE5MTEyMy0wMDAwMDAwMi16ZG5fdHQtc2Np
============================================
Sat, 23 Nov 2019 10:00:00 +0900
--------------------------------------------
ポケトーク、新型発表で再びシェア9割に達する<音声翻訳機売れ筋ランキング> 2019/11/23(BCN)
--------------------------------------------
https://rdsig.yahoo.co.jp/rss/l/headlines/prod/bcn/RV=1/RU=aHR0cHM6Ly9oZWFkbGluZXMueWFob28uY28uanAvaGw_YT0yMDE5MTEyMy0wMDE0NjQ4NC1iY24tcHJvZA--
============================================
Sat, 23 Nov 2019 10:00:00 +0900
--------------------------------------------
つけたままPCやスマホの操作がしやすい指サック。プラス(Impress Watch)
--------------------------------------------
https://rdsig.yahoo.co.jp/rss/l/headlines/sci/impress/RV=1/RU=aHR0cHM6Ly9oZWFkbGluZXMueWFob28uY28uanAvaGw_YT0yMDE5MTEyMy0wMDAwMDAwNy1pbXByZXNzLXNjaQ--
============================================
Sat, 23 Nov 2019 10:00:02 +0900
--------------------------------------------
ポータブル電源なのにテスラに充電できるって!?(ギズモード・ジャパン)
--------------------------------------------
https://rdsig.yahoo.co.jp/rss/l/headlines/prod/giz/RV=1/RU=aHR0cHM6Ly9oZWFkbGluZXMueWFob28uY28uanAvaGw_YT0yMDE5MTEyMy0wMDAwMDAwMS1naXotcHJvZA--
============================================
Sat, 23 Nov 2019 10:00:12 +0900
--------------------------------------------
ドコモの「AQUOS sense3」が総合3位に上昇、「iPhone 11」に割って入る(ITmedia Mobile)
--------------------------------------------
https://rdsig.yahoo.co.jp/rss/l/headlines/prod/zdn_m/RV=1/RU=aHR0cHM6Ly9oZWFkbGluZXMueWFob28uY28uanAvaGw_YT0yMDE5MTEyMy0wMDAwMDAxNS16ZG5fbS1wcm9k
============================================
Sat, 23 Nov 2019 11:00:00 +0900
--------------------------------------------
Core i9とQuadroを搭載した円柱型ワークステーション「ASUS Mini PC ProArt PA90」(Impress Watch)
--------------------------------------------
https://rdsig.yahoo.co.jp/rss/l/headlines/sci/impress/RV=1/RU=aHR0cHM6Ly9oZWFkbGluZXMueWFob28uY28uanAvaGw_YT0yMDE5MTEyMy0wMDAwMDAxMC1pbXByZXNzLXNjaQ--
============================================
Sat, 23 Nov 2019 11:00:00 +0900
--------------------------------------------
壁に耳あり障子に口ありをめざすAlexaの存在感(Impress Watch)
--------------------------------------------
https://rdsig.yahoo.co.jp/rss/l/headlines/sci/impress/RV=1/RU=aHR0cHM6Ly9oZWFkbGluZXMueWFob28uY28uanAvaGw_YT0yMDE5MTEyMy0wMDAwMDAwOS1pbXByZXNzLXNjaQ--
============================================
Sat, 23 Nov 2019 11:00:10 +0900
--------------------------------------------
大阪で自動運転バスの一般向け試乗会 12月17・18日開催(レスポンス)
--------------------------------------------
https://rdsig.yahoo.co.jp/rss/l/headlines/sci/rps/RV=1/RU=aHR0cHM6Ly9oZWFkbGluZXMueWFob28uY28uanAvaGw_YT0yMDE5MTEyMy0wMDAwMDAwNC1ycHMtc2Np
============================================
Sat, 23 Nov 2019 11:01:10 +0900
--------------------------------------------
AIがeスポーツ大会運営をサポート! 開催状況に合わせてスポンサー特典も(マイナビニュース)
--------------------------------------------
https://rdsig.yahoo.co.jp/rss/l/headlines/sci/mynavin/RV=1/RU=aHR0cHM6Ly9oZWFkbGluZXMueWFob28uY28uanAvaGw_YT0yMDE5MTEyMy0wMDAwMDAwMS1teW5hdmluLXNjaQ--
============================================



コマンドラインツールをつくる


ターミナルから実行するアプリを作ります。

【機能】

  • ターミナルから実行する
  • メニューからタイトルを番号で選択する
  • メニュー追加機能なし
  • ネット未接続実行・入力エラー等に未対応
  • 取得データ保存機能なし
  • URLはテキストでハイパーリンクではありません
menu = {
        "my_blog":"http://chayarokurokuro.hatenablog.com/rss",
        "YahooNewsHeadlines":"https://headlines.yahoo.co.jp/rss/all-c_sci.xml",
        "はてなブロググループプログラミング":"https://hatenablog.com/g/11696248318754550880/feed",
        "はてなブロググループ歴史":"https://hatenablog.com/g/11696248318754550904/feed",
        'はてなブロググループ読書':'https://hatenablog.com/g/11696248318754550864/feed',
        'はてなブロググループバイク':'https://hatenablog.com/g/11696248318754550871/feed',
        'はてなブロググループ知識': 'https://hatenablog.com/g/11696248318754550903/feed',
        "youtube_Jazz":"https://www.youtube.com/feeds/videos.xml?user=jazznbluesexperience",
        "ラジオ日経競馬実Web":"http://keiba.radionikkei.jp/keiba/rss2/index.xml",
        "google_japan_news":"https://news.google.com/news/rss/headlines/section/geo/japan",
        "jra中央競馬":"http://www.jra.go.jp/rss/jra-info.rdf",
        "日本銀行":"https://www.boj.or.jp/rss/whatsnew.xml",
        "日本銀行統計":"https://www.boj.or.jp/rss/statistics.xml",
        "気象庁":"https://www.jma-net.go.jp/rss/jma.rss",
        "天気プラザ長崎":"http://tenki.wet.co.jp/forecast/day01ngs.rdf",
        "経済リポート.com雇用人材労働":"http://xml.keizaireport.com/rss/node_18.xml",
        "経済リポート.comネットビジネス":"http://xml.keizaireport.com/rss/node_89.xml",
        "経済リポート.comウェブ技術":"http://xml.keizaireport.com/rss/node_91.xml",
        "JPXmarket_news":"https://www.jpx.co.jp/rss/markets_news.xml",
        "JPX売買停止情報":"https://www.jpx.co.jp/rss/equities-suspended.xml",
        "株価アルゴリズム":"http://rizumunet.blog.jp/index.rdf",
        "Yahooファイナンス株価予想":"https://info.finance.yahoo.co.jp/kabuyoso/rss/",
        "nikkei_Linux":"https://bizboard.nikkeibp.co.jp/b_servlet/PushServletAll?TEMPLATE_ENC=UTF-8&APPLICATION_XML=1&BZB_DATE_TOKEN=72dce95a0c8b88871ce49313a3b3d30da8fdfa91bf6e8138e8d771f29074920c&TEMPLATE=bizbo_rssm2444_pers.rdf",
        "twitter_rss_funassyi":"http://twitrss.me/mobile_twitter_to_rss/?user=funassyi",
        "twitter_rss_kenichiromogi":"http://twitrss.me/mobile_twitter_to_rss/?user=kenichiromogi",
        "twitter_rss_ks_1013":"http://twitrss.me/mobile_twitter_to_rss/?user=ks_1013",
        "twitter_rss_gloomynews":"http://twitrss.me/mobile_twitter_to_rss/?user=gloomynews",
        "twitter_rss_PythonSoftwareFoundation":"http://twitrss.me/mobile_twitter_to_rss/?user=ThePSF",
        "nhk主要ニュース":"https://www.nhk.or.jp/rss/news/cat0.xml",
        "nhk社会":"https://www.nhk.or.jp/rss/news/cat1.xml",
        "nhk科学医療":"https://www.nhk.or.jp/rss/news/cat3.xml",
        "nhk政治":"https://www.nhk.or.jp/rss/news/cat4.xml",
        "nhk経済":"https://www.nhk.or.jp/rss/news/cat5.xml",
        "nhk国際":"https://www.nhk.or.jp/rss/news/cat6.xml",
        "nhkスポーツ":"https://www.nhk.or.jp/rss/news/cat7.xml",
        "nhk文化エンタメ":"https://www.nhk.or.jp/rss/news/cat2.xml",
        "nhkライブニュース":"https://www.nhk.or.jp/rss/news/cat-live.xml",
        "gihyo技術評論社":"https://gihyo.jp/feed/rss2",
        "itmedia":"https://rss.itmedia.co.jp/rss/2.0/itmedia_all.xml",
        "codezine":"https://codezine.jp/rss/new/20/index.xml",
        "publickey":"https://www.publickey1.jp/atom.xml",
        "gigazine":"https://gigazine.net/news/rss_2.0/",
        "techcrunch日本語版":"https://jp.techcrunch.com/feed/",
        "マイナビ全ジャンル":"https://news.mynavi.jp/rss/index.xml",
        "マイナビ開発エンジニア":"https://news.mynavi.jp/rss/business/enterprise/engineer.xml",
        "Qiita_Python":"http://qiita.com/tags/Python/feed",
        "Qiita_Linux":"http://qiita.com/tags/Linux/feed",
        "Qiita_MySQL":"http://qiita.com/tags/MySQL/feed",
        "Qiita_Git":"http://qiita.com/tags/Git/feed",
        "Qiita_GitHub":"http://qiita.com/tags/GitHub/feed",
        "Qiita_HTML5":"http://qiita.com/tags/HTML5/feed",
        "Qiita_機械学習":"http://qiita.com/tags/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92/feed",
        "Qiita_MachineLearning":"http://qiita.com/tags/MachineLearning/feed",
        "Qiita_JavaScript":"http://qiita.com/tags/JavaScript/feed",
        "Qiita_Bash":"http://qiita.com/tags/Bash/feed",
        "Qiita_Vim":"http://qiita.com/tags/Vim/feed",
        "Qiita_ShellScript":"http://qiita.com/tags/ShellScript/feed",
        "Qiita_初心者":"http://qiita.com/tags/%E5%88%9D%E5%BF%83%E8%80%85/feed",
        "Qiita_新人プログラマ応援":"http://qiita.com/tags/%E6%96%B0%E4%BA%BA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E5%BF%9C%E6%8F%B4/feed",
}


##########################################
import feedparser

# メニューを出力
print("="*44)
print("【Menu】")
print("="*44)
for k,v in enumerate(menu):
    print(k,v)
print("")
num = int(input("which number? >>"))
print("wait, please")


key_list = list(menu.keys())
key = key_list[num]
url = menu.get(key)

# RSS取得結果出力
def f_parser(url):
    d = feedparser.parse(url)
    entries_data = d.entries
    print("="*44)
    print("【結果】")
    print("="*44)
    for i in (reversed(entries_data)):
        try:
            print(i.published)
            print("-"*44)
            print(i.title)
            print("-"*44)
            print(i.link)
            #print(i["summary"])
            print("="*44)
        except:
            print(i.updated)
            print("-"*44)
            print(i.title)
            print("-"*44)
            print(i.link)
            #print(i["summary"])
            print("="*44)

##### 実行 #####
f_parser(url)



おわりに


自家製のニュースアプリが作れますね。楽しい。
分野別に取得したり、取得データを保存できるようにしたり、URLがハイパーリンクになっていたり、定期的に自動取得したり・・・いろんな機能をつければ重宝しそう。



以上です。