GithubHelp home page GithubHelp logo

boatrace_official_website_proxy's Introduction

boatrace_official_website_proxy

概要

ボートレース公式サイトの proxy
以下を目的としている

  • ファイルのキャッシングによるパフォーマンス向上
  • インターフェースの統一による保守性の向上

キャッシングに関して

毎回公式サイトへリクエストしてそれをスクレイピングするというアクションは、月次や年次の単位でやり直す際に以下のような問題が発生する。

  • 前回と同じ量のリクエストが発生してしまう
    • 結果として、ホスト側に負荷がかかってしまう
    • ネットワークラウンドトリップがボトルネックとなってスクレイピング処理にかかる時間が長くなる

proxy がキャッシュを保持することで上記を解決する。

インターフェースに関して

公式サイトはリニューアルされたら URL が変わってしまうが、proxy のインターフェースは変えないようにすれば保守性が高まる。

例えば公式サイトの開催スケジュールの URL は 2020 年時点で以下である。
https://boatrace.jp/owpc/pc/race/monthlyschedule?ym=202008

これは公式サイトがリニューアルされたら https://boatrace.jp/events/2020/08 のような全然違う書式の URL になる可能性がある(前回のリニューアルでは実際そうなっている)

そこで、公式サイトへはこのリポジトリを経由してアクセスするようにしておけば上記の問題は解決できる。

例えば、開催スケジュールの URL は以下で統一する。
http://localhost:5000/file?month=8&page_type=event_schedule_page&version=1707&year=2020

クライアントは、公式サイトのバージョンが変わったらパラメータの version の値だけ変えればいい。
(実際はこのパラメータは省略すると最新のバージョンが既定値として適用されるのでコンテキストによってはそれも気にしなくていい)

使用例

docker によるコンテナの実行

プロジェクトのルート(ここを基準にボリュームをマウントするため)で以下を実行

docker run --name boatrace_official_website_proxy --rm -it -v $PWD:/webapp -w /webapp --env PYTHONPATH="/webapp:$PYTHONPATH" -p 55000:5000 --network=default python:3.8 bash -c "pip3 install -r requirements.txt && python3 server.py"

※ 引数は適宜変更してください

boatrace_official_website_proxy's People

Contributors

k0kishima avatar dependabot[bot] avatar

Watchers

 avatar

boatrace_official_website_proxy's Issues

公式サイトのエラーハンドリング

リクエストしたときに異常系のHTTPステータスコードが返ってきた場合、
データが存在しない場合

上記のようなケースにキャッシュを上書きしないようにしたい

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.