Project

General

Profile

機能 #6562

URLを登録して、クローリング&スクレイピングできるようにする

Added by 直野 雄一 7 months ago. Updated 3 months ago.

Status:
新規
Priority:
通常
Assignee:
-
Start date:
Due date:
% Done:

0%

Estimated time:
Issue Tracker:

Description

スクレイピング制御クラス

URLを渡すと、ルールを選択して、ダウンロードとキャッシュ制御を行い、次のリクエスト情報を生成する。1個のURLに対して処理を行い、関連コンテンツのスクレイピングは、コンテキストを戻された基盤処理が制御する。

コンテキスト情報は1回のジョブが持ち回るもので、次の情報を持つ。

  • スクレイピング済みのリクエスト情報
    • 多重スクレイピングを防止するため
  • 未スクレイピングのリクエスト情報

作業

  • ルールを特定する
  • キャッシュを取得する
  • ダウンロードする
  • キャッシュを保存する
  • scraperのrulesをインスタンス変数にする
    • scraperインスタンスをアプリ全体で使用するには、initializerでグローバル変数に登録すべき
  • 一連の処理を実行する
    • テスト
      • キャッシュ…ある/ない
      • 次のリンク
      • キャッシュを使う
      • タイムアウト
      • リダイレクト
  • Hashで返している値をクラス化する
  • 関連リクエストを登録する
    • 全処理実行メソッドを制御するメソッドを作成して、キューで管理する

History

#1 Updated by 直野 雄一 7 months ago

  • Description updated (diff)
  • Start date set to 2018-10-04

#2 Updated by 直野 雄一 7 months ago

  • Description updated (diff)

ルールの特定を実装した。

#3 Updated by 直野 雄一 7 months ago

  • Description updated (diff)

#4 Updated by 直野 雄一 7 months ago

  • Description updated (diff)

#5 Updated by 直野 雄一 7 months ago

S3アクセスにActiveStorageを使うこととする。チュートリアルにはアップロードとURL取得のサンプル・コードしか示されていないが、普通にデータを取得することもできるらしい。当たり前だけど。

#6 Updated by 直野 雄一 7 months ago

#7 Updated by 直野 雄一 7 months ago

Minioのようにエンドポイントなどが異なるS3互換ストレージにActiveStorageでアクセスする方法を説明している。

#8 Updated by 直野 雄一 7 months ago

ActiveStorageをインストールする。

$ docker-compose exec app rails active_storage:install
$ docker-compose exec app rails db:migrate

S3互換ストレージを使うため、gemを追加して、ビルドする。

Gemfileに次のコードを追加する。

gem "aws-sdk-s3"

ビルドする。

$ docker-compose build

ActiveStorageがS3にアクセスするように、config/storage.ymlを変更する。

s3:
  service: S3
  access_key_id: <%= ENV["S3_ACCESS_KEY"] %>
  secret_access_key: <%= ENV["S3_SECRET_KEY"] %>
  region: <%= ENV["S3_REGION"] %>
  bucket: <%= ENV["S3_BUCKET"] %>
  endpoint: <%= ENV["S3_ENDPOINT_URL"] %>
  force_path_style: <%= ENV["S3_FORCE_PATH_STYLE"] %>

localなど別の設定も記載されているが、使わないので削除する。
設定値は全て環境変数から取得する。コンテナなので。
AWSではないS3互換ストレージにアクセスするため、endpointを設定する。
Minioではバケットの指定が、AWDのようなドメインではなくパスで指定するため、force_path_styleを設定する。

Railsの全ての環境でS3にアクセスするため、config/environments/development.rbconfig/environments/production.rbconfig/environments/test.rbを編集する。

次のコードを削除する。

config.active_storage.service = :local

次のコードを追加する。

# Store file in S3 storage
config.active_storage.service = :s3

コンテナに環境変数を設定するため、docker-compose.ymlを編集する。

appサービスのenvironmentsに次のコードを追加する。

- "S3_ACCESS_KEY=s3-access-key"
- "S3_SECRET_KEY=s3-secret-key"
- "S3_REGION=my-region"
- "S3_BUCKET=test.crawline"
- "S3_ENDPOINT_URL=http://s3:9000"
- "S3_FORCE_PATH_STYLE=true"

これで、ActiveStorageを使う準備が整った。

次に、ActiveStorageを使ってファイルを添付するモデルを作成する。

$ docker-compose exec app rails g model CacheContent cache_hash:string downloaded_timestamp:datetime

モデルを作成したので、DBにスキーマ定義を反映する。

$ docker-compose exec app rails db:migrate

CacheContentモデルにファイルを添付できるように、app/models/cache_content.rbを編集する。

class CacheContent < ApplicationRecord
  has_one_attached :content
end

これで、ActiveStorageを使ってファイルを保存するモデルが整った。

次に、モデルを実際に使ってファイルを添付する。

Railsコンソールを開く。

$ docker-compose exec app rails c

ファイルを添付する。

> cache = CacheContent.new
> cache.content.attach(io: StringIO.new("test"), filename: "test.txt")
> cache.save

添付したファイルを読み込んでみる。

> cache.content.download

#9 Updated by 直野 雄一 6 months ago

  • Description updated (diff)

キャッシュ取得を実装した。

#10 Updated by 直野 雄一 6 months ago

bblimke/webmock: Library for stubbing and setting expectations on HTTP requests in Ruby. https://github.com/bblimke/webmock

#11 Updated by 直野 雄一 6 months ago

  • Description updated (diff)

ダウンロード処理を実装した。

#12 Updated by 直野 雄一 6 months ago

  • Description updated (diff)

キャッシュの保存は実装済み。

#13 Updated by 直野 雄一 6 months ago

  • Description updated (diff)

#14 Updated by 直野 雄一 6 months ago

  • Description updated (diff)

scraperのrulesをインスタンス変数にした。

GitHubが障害中なので、プルリクを作成せずにローカルでfinishした。

#15 Updated by 直野 雄一 6 months ago

  • Description updated (diff)

#16 Updated by 直野 雄一 6 months ago

  • Description updated (diff)

#17 Updated by 直野 雄一 6 months ago

  • Description updated (diff)

#18 Updated by 直野 雄一 6 months ago

  • Description updated (diff)

#19 Updated by 直野 雄一 3 months ago

  • Start date deleted (2018-10-04)

Also available in: Atom PDF