arXiv APIの使い方 ~ArXiv Bookmark開発記その3~
こんにちは
ArXiv Bookmark開発記第三弾は、arXivから論文情報を検索できる「arXiv API」についてです!
arXiv API | arXiv e-print repository
arXivでは論文検索用のAPIを提供してくれているため今回はこれを利用します。
詳しいマニュアルはこちらから
arXiv API
この公式マニュアルで紹介されているように Python + feedparserを使ってarXiv APIをサクッと叩いていきます!!
まずはfeedparserをインストール.
pip install feedparser
import feedparser base_url = "https://export.arxiv.org/api/query?search_query=" # クエリを指定 query = "" # 検索件数 max_results = 10 # 結果を新しいものから順にソートする sort_results = "&sortBy=lastUpdatedDate&sortOrder=descending&max_results={max_results}".format(max_results=max_results) d = feedparser.parse(base_url + query + sort_results) # entriesに検索結果が格納されている for entry in d.entries: # ここから先の処理は後述
こんな感じでクエリで指定した条件で検索をかけることができます。
クエリには例えばカテゴリーで検索したい場合は、公式マニュアル の"5.3. Subject Classifications" からカテゴリーを選択し、下記のように指定することができます。
# cs.CVの場合 query = "cat:cs.CV"
クエリの細かい指定方法はマニュアルを確認してください。
論文情報の取得
feedparserを使って簡単にAPIを叩くことができたので、ここからは論文タイトルやサマリーなどより詳細な情報を取得するための方法についてです!
取得できる情報は公式マニュアル の"5.2. Details of Atom Results Returned"に書かれています。
では実際のコードで見ていきましょう!!
import datetime for entry in feed.entries: # id # 例: 'http://arxiv.org/abs/1909.07581v2' ← ID + v2 みたいに"vn"としてバージョン情報がついているので"v"以前を取り出す arxiv_id = os.path.basename(entry.id).split("v")[0] # タイトル title = entry.title # リンクURL link = entry.link # サマリー. 改行を削除 summary = entry.summary.replace("\n", "") # 第一版提出日時 # time.struct_time 形式で保存されているのでdatetime形式に変更(https://cortyuming.hateblo.jp/entry/20100919/p1) published = datetime(*entry.published_parsed[:6]) # 更新日時 updated = datetime(*entry.updated_parsed[:6]) # バージョン version = int(link[-1]) # 著者 authors = dict(authors=[author["name"] for author in entry.authors]) # カテゴリー categories = dict(categories=[tags["term"] for tags in entry.tags]) # コメント # コメントがない場合もあるので、try~exceptで処理 try: comment = entry.arxiv_comment except AttributeError: comment = None
こんな感じで必要な情報は取り出せるはずです!!
まとめ
Python + feedparser があれば簡単に arXiv APIから論文検索をかけることができます。
これで論文情報を取得して必要に応じて表示する感じでサイトを作っていこうかと思います。