0
0

More than 3 years have passed since last update.

写真ACのダウンロード数をグラフ化したい【MySQL環連携編】 ~1日10行コーディング~

Posted at

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との接続用に

crawler.rb
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

上記のコードを追加します。
その上で、メインとなっていたパース処理の部分を

crawler.rb
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})
}

このように書き換えます。
そしていつものように実行をするとデータがちゃんと格納されると思います。

これでデータの収集部分は完了です。
(少し過ぎてしまった....)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0