4日目
昨日に引き続きグラフアプリをデータを実際に格納する部分を作成します。
【技術テーマ】
環境構築
言語
- MySQL
目標成果物
今日はMySQLの環境構築を完了させ、前回の情報をDBに格納するところまでやりたいと思います。
コードと資料
1. MySQLのインストール
https://qiita.com/hkusu/items/cda3e8461e7a46ecf25d
こちらの記事を参考に指定されたコマンドを実行
【実行コマンド】
ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
結果
curl: (22) The requested URL returned error: 404 Not Found
参照したデータが古かったせいかダメでした....
と思ったが、これはHomebrewのインストールでそれは確か済んでるはずなので次のMySQLのインストールの部分を実行します。
【実行コマンド】
brew update
brew install mysql
これだけでインストール完了しました!
パスワードなどの設定も済ませたのですが、最近のsequel proからは簡単にアクセスできなくなってたみたいで....
ALTER USER 'ユーザー名'@'localhost' IDENTIFIED WITH mysql_native_password BY 'パスワード';
この設定をする必要がありました。
2. ライブラリの追加
MySQLにデータを入れるためにはそれ用のライブラリが必要なのでGemfileに下記の1行を追加します。
gem 'activerecord'
gem 'mysql2', '0.5.2'
その状態で
bundle install --path .bundle
を実行すると。エラーになったのですが
bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib"
このコマンドを実行したところ問題なくインストールできるようになりました。
3. ログデータの格納
まず、データを格納するためのテーブルを定義します。今回必要なのはどの画像が何日段階でどれだけダウンロードされてるかなので、ざっくり下記のようなテーブルになるかと。
CREATE TABLE `logs` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`image_id` int DEFAULT NULL,
`download` int DEFAULT NULL,
`date` date DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
そしてクローラーの方のコードに手を加えます。
まずMySQLとの接続用に
require 'active_record'
require 'date'
# DB接続処理
ActiveRecord::Base.establish_connection(
:adapter => 'mysql2',
:database => 'データベース名',
:host => 'localhost',
:username => 'ユーザー名',
:charset => 'utf8mb4',
:encoding => 'utf8mb4',
:collation => 'utf8mb4_general_ci',
:password => 'パスワード'
)
class Log < ActiveRecord::Base; end
上記のコードを追加します。
その上で、メインとなっていたパース処理の部分を
page = agent.get("https://www.photo-ac.com/creator/list/?pl_q=&pl_order=-releasedate&pl_pp=200&pl_disp=all&pl_ntagsec=&pl_tags50over=&pl_chkpsd=")
doc = Nokogiri::HTML.parse(page.body, nil, 'utf-8')
doc.css(".photo-list").each{|div|
image_id = div.css(".sectiondata li")[0].text.split(":")[1]
download = div.css(".sectionimg .preview")[0].text
Log.create({image_id:image_id,download:download,date:Date.today})
}
このように書き換えます。
そしていつものように実行をするとデータがちゃんと格納されると思います。
これでデータの収集部分は完了です。
(少し過ぎてしまった....)