情報系人間のブログ

プログラミング、開発に関することを書いていきます。

プロ野球の結果をスクレイピングする

スクレイピングについて勉強したいと思いプロ野球の結果を取得するコードを書いてみました。
データ取得元はこちら
スポーツナビ

Rubyで書いたのですが、nokogiriというライブリが非常に便利でした。
最低限動くだけならかなり簡単に書くことができますし、かなり実用的だと思います。
ですかスクレイピングは法律関係が色々あるので実際使うとなると難しいですね。

scrape.rb

# -*- coding: utf-8 -*-
require 'mechanize'
require 'nokogiri'

date = ARGV[0]

page = Mechanize.new.get("http://baseball.yahoo.co.jp/npb/schedule/?&date=" + date)
doc = Nokogiri::HTML.parse(page.body)

doc.xpath('//table[@class="yjMS mb5"]/tr').each do |node|
  
  # team
  node.xpath('td[@class="today pl7"]/a').each do |elem|
    p elem.text
  end

  # startTime ballPark
  node.xpath('td[@class="today pl7"]/em').each do |elem|
    /(\d{2}:\d{2})(.+)/ =~ elem.text
    p $1
    p $2.gsub(" ", "")   
  end

  # score inning
  node.xpath('td[@class="today ct"]').each do |elem|
    if /(\d+) - (\d+)/ =~ elem.text
      p $1
      p $2
      p elem.text
    end

    elem.xpath('a').each do |inning|
      p inning.text
    end
  end

  # pitchers
  node.xpath('td[@class="today"]/table/tr').each do |elem|
    p elem.xpath('td[@class="w"]').text.gsub(/[[:space:]]/,"")
    p elem.xpath('td[@class="s"]').text.gsub(/S[[:space:]]/,"")
    p elem.xpath('td[@class="l"]').text.gsub(/[[:space:]]/,"")
  end
  
end

使い方
引数に日付をYYYYMMDD形式で指定します。

ruby scrape.rb 20150823

出力

ホームチーム
アウェイチーム
開始時間
球場
ホームチームの得点
アウェイチームの得点
試合のスコア
進行状況
勝利投手
セーブ投手
敗戦投手

が出力されます。

XcodeでCode Sining Error

久しぶりにXcodeでビルドしたらタイトルのエラーが出ました。

エラー全文は以下の通り。

The identity used to sign the executable is no longer valid
Please verify that your device's clock is properly set,
and that your signing certificate is not expired.

前回最後にビルドした後にdeveloperアカウントを更新したのでその為だと思います。

preferences->accounts->view details->更新としてもエラーは消えず。
preferences->accountsで一度Apple IDを削除して再び追加したらエラーは消えました。
めでたし。

centos6.5でeamcs caskを使ったパッケージ管理

今までemacsのパッケージ管理にcaskを使うことにしたのでメモ。

caskについて

caskemacsのパッケージ管理をするツールです。
パッケージ開発や依存性管理ができるそうです。

導入

caskはemacs24以上が必要なのでまずこちらから。
centos6.5のデフォルトではemacs23なのでソースからコンパイルしてインストールします。

sudo yum -y install gcc make ncurses-devel wget
wget http://ftp.jaist.ac.jp/pub/GNU/emacs/emacs-24.x.tar.gz
tar xvf emacs-24.x.tar.gz
cd emacs-24.x
./configure –without-x –without-selinux
make
sudo make install

次にcaskを導入し,パスを通します。

curl -fsSL https://raw.githubusercontent.com/cask/cask/master/go | python
export PATH="$HOME/.cask/bin:$PATH"

上記の他にもbrew,gitを使った方法があります。

設定

インストールが済んだところで設定に入ります。
パッケージを導入するためにCaskというファイルを作成します。このファイルを元に必要なパッケージを導入、管理します。
形式は以下のような形になります。depends-onの後にパッケージ名を書くだけです。

(depends-on "xxxxxxxx")

Caskファイルが完成したら次のコマンドでパッケージをインストールできます。

cask install

emacsの設定

caskの設定は終わりましたが、emacsにも設定が必要です。
init.el等に以下の記述を追加します。

(require 'cask "~/.cask/cask.el")
(cask-initialize)

これでcaskによるパッケージ管理環境が完成しました。
el-getという方法もあるのであとで調べようと思います。

curlのRESTリクエストの送り方

# POST
$ curl  -X POST -d http://localhost:3000/xxxxx "title=タイトル"

# PUT
$ curl -X PUT -d http://localhost:3000/xxxxx/1 "title=タイトル"

# GET
$ curl http://localhost:3000/xxxxx/3

# DELETE
$ curl -X DELETE http://localhost:3000/xxxxx/5 

Widgetter

iosアプリWIdgetterをリリースしました。

機能はウィジェットでツイートが見れるというシンプルなものです。
リツイート、返信、お気に入りもできるようになっています。

f:id:reida:20150720101349p:plain

Widgetter - useful widget for Twitter on the App Store on iTunes