平衡点


2009/12/11

_ ADS へ検索かけて BibTeX のエントリを持ってくる

何故か Ruby::Mechanize を使って 10 分スクリプトでっちあげた.API 公開されてないのかな…ありそうなモンだけれど.

というわけで.

#!/usr/bin/env ruby
require 'mechanize'
require 'kconv'

agent = WWW::Mechanize.new
ads_search = agent.get("http://adsabs.harvard.edu/basic_search.html")
search_form = ads_search.forms[0]
search_form['qsearch'] = "#{ARGV.join(" ")}"
redirect_page = agent.submit(search_form)
results = redirect_page.forms[1].checkboxes_with(:name => 'bibcode')
results_number = results.size
if results_number == 0
  puts "no search result retry!"
elsif results_number > 1
  puts "search result too many, retry!"
  puts "========================="
  i = 0
  results.each do |result|
    puts i.to_s + " " + result.value
    i += 1
  end
else
  result = agent.get(redirect_page.links[5].href)
  bibtex_query = 
    result.link_with(:text => "Bibtex entry for this abstract").href
  bibtex = agent.get(bibtex_query).content.to_s
  puts bibtex.split("\n")[5..-1].join("\n")
end

単にBasic Searchの form に ARGV.join(" ") を入れて, 検索結果が一つだったら BibTeX のエントリを標準出力へ, というもんです.本当はちょっとだけ対話的に, 例えば検索結果の一覧を表示して,必要なモンだけ選んで BibTeX のエントリをまとめて取得する, とかやりたかったけれど, 時間ないんで…

そのうち弄るかもしれない. とりあえず放置((あ, そういえば NAOJ って ADS のミラー止めたのかな)). 誰か弄りませんか? id:msll さんとか.

結果は以下の通り

$ ADSquery2bib.rb Busse 1970 thermal instabillity
 @ARTICLE{1970JFM....44..441B,
    author = {{Busse}, F.~H.},
     title = "{Thermal instabilities in rapidly rotating systems.}",
   journal = {Journal of Fluid Mechanics},
      year = 1970,
    volume = 44,
     pages = {441-460},
       doi = {10.1017/S0022112070001921},
    adsurl = {http://adsabs.harvard.edu/abs/1970JFM....44..441B},
   adsnote = {Provided by the SAO/NASA Astrophysics Data System}
  }

_ 今日は予備審らしい

いやぁ, 準備が追いつきません. 間に合うのかなコレ…

札幌に来ています. とりあえず日曜日に帰ることにして, 土曜は札幌を堪能しようかと思っています.

うー…. 寝れん…


連絡先など
最近の日記
一覧
2006|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|02|03|04|08|09|10|11|12|
2013|01|02|03|04|05|06|08|09|10|11|12|
2014|01|02|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|09|10|
2016|02|03|
2017|01|02|03|05|06|07|09|11|12|
2018|03|06|07|10|11|12|
2019|01|02|03|04|05|07|10|12|
2020|01|02|03|04|05|08|09|10|11|12|
2021|01|02|03|05|06|07|08|09|11|12|
2022|01|02|03|04|05|06|08|10|11|12|
2023|02|03|04|06|08|09|11|12|
2024|01|02|03|
Back to Top ▲