ラベル Python/定期実行 の投稿を表示しています。 すべての投稿を表示
ラベル Python/定期実行 の投稿を表示しています。 すべての投稿を表示

2018-04-08

Python3でCrontabを設定し指定したキーワードからツイッターのいいねの自動実行を行う

#この記事の目的


  • PythonでCRONTABを利用して、いいね自動化プログラムを定期実行する方法をまとめます。
  • 内容としては主に以下の内容となります
    • CRONTABとは何かという話
    • 実際にCRONTABを使うときに必要な知識
    • PythonコードをCRONTABから実行する方法

2017-11-19

Jenkins上でPython3の定期実行ジョブを作った時のメモ

# やりたいこと

- Jenkins上でpython3のスクリプトを、定期実行します。
- JenkinsはCI(継続的インテグレーション)ツールとして利用されますが、同時に定期実行の機能を持ち合わせています
- かつ、サーバー上で実行を行ってくれるので、パソコンを起動しなくても定期実行を行ってくれるようになります。

# 背景知識

- そもそもJenkinsとは何か?


Javaで書かれたオープンソース継続的インテグレーションツール
(英:Continuous[継続した] Integration[結合])である。(Jenkinsとはなんぞや?)

- 継続的インテグレーション(CI)とは?


継続的インテグレーションとは、ソフトウェア開発において、ビルドやテストを頻繁に繰り返し行なうことにより問題を早期に発見し、開発の効率化・省力化や納期の短縮を図る手法。 特に、専用のツールを用いてこのプロセスを自動化あるいは半自動化し、効率的に実施する方式。(Jenkinsとはなんぞや?)


- 継続的インテグレーションのメリットとは


毎日、最新版のアプリケーションをサーバーにデプロイすることで、最新のアプリケーションに対するテストを行えます。テストのカバレッジを毎日収集することで、テストの進捗状況を細かく確認することができます。静的解析を行うことで、手動では見つけにくいバグや品質低下を発見することができます。これらを毎日人力で行うことは非常に手間です。Jenkinsはそれらを自動化する手助けをしてくれます。(Jenkinsで実現するJava EEアプリケーションの自動ビルドと自動デプロイ)


- Jenkinsは定期実行するために有効なツール?


で、Jenkinsで今回やりたいのは継続的インテグレーションではなく、定期実行プログラムなのです。Jenkinsが強いのは、Cronをサーバー上で設定できるので、非常に便利です。
Jenkinsは継続的デリバリーとか継続的インテグレーションの文脈で語られることが多いので、ソースコードのビルドだったりテストの実行だったりをエンジニアの代わりに実行してくれるツールだと思われていることが多いです。(当たり前のことを長々と何言ってんだって感じですが)しかしJenkinsの機能を、そういったような開発管理ツールではなく汎用的なバッチツール、要は「すごいcron」として使用できることも分かったのでちょっと試してみました。(Jenkinsをすごいcronとして使う)

# 前提


 - すでにJenkinsがのっかっているサーバーが存在することを仮定
- 実行したい処理を書いたスクリプトも前提として存在する

# 手順


- Jenkinsに新規アカウントを作成し、ログインする
- ShiningPanda Pluginのインストールを行う


ShiningPandaは、JobごとにPythonの環境を構築してくれる、virtualenvを作成してくれます。これを利用することで、ほかのPython環境との依存性を低め、切り分けることができるようになります。

今回は、Jenkins ShiningPanda Plugin(輝くパンダ?)プラグインを利用して、ジョブ固有のPython環境を作る方法を紹介します。 ShiningPanda Pluginではvirtualenvを利用して、複数(ジョブ毎)のPython環境を切り替えます。Jenkins ShiningPanda Pluginによるジョブ固有のPython環境(virtualenv)

Amazon LinuxなどRedhat系Linuxでは、Pythonのシステム依存度が非常に高く、下手にアップデートなどを行うと悲劇となることがよく知られています。 デフォルトのモジュール空間へのライブラリ追加も極力避けたいところです。 特にJenkinsでPythonのシステムをテストする場合や、Pythonのスクリプトを実行したい場合は、ジョブ毎にモジュール空間を分けることがベストプラクティスです。Jenkins ShiningPanda Pluginによるジョブ固有のPython環境(virtualenv)

- Jenkins > 設定でpython3の設定を行う

Pythonの実行プログラムは、Python3系のことを行わなければならないが、もともと対応しているバージョンが2.0にしか対応していない。すでにPython2の実行ファイルが存在する場合、新規にPython3を設定します。





- 新規ジョブの作成を選ぶ

- ジョブ名を設定する

- フリースタイル・プロジェクトのビルドを選択する

- Jenkins / その他 / 「作成したプロジェクト名」を選択する

- 設定を選ぶ

- 詳細設定を記入する

ここには、ビルドでVirtualenv Builderを選択し、Python環境を構築します。もろもろのライブラリなどをここでインストールさせます。


- ビルド実行を選択

- ビルドに成功すればOK

- ビルドトリガを設定し、CRONを書きます。

この辺を設定すればわかる。[Jenkins] ビルドトリガ(定期的に実行)設定についてのまとめ

これで定期実行された。

2017-09-24

【Python】Slack Botの作り方まとめ - Webスクレイピング・定期実行の合わせ技 -

#背景


ちはっす。DAIです。
会社の同僚と自宅でよく作業会をやっています。音楽聞いて、料理食べて、あとはただコツコツとみんなでそれぞれが勉強するだけなのですが、とてもQOLが高いです。

#やりたいこと


チケットを譲ってくれる人を見つけられるサイトがあるそうです。ここの最新情報を毎日自動でSlackで更新するようにします。


おけぴチケット救済サービス(定価以下限定チケット掲示板)

ミュージカルや演劇、劇団四季、宝塚歌劇、クラシック、コンサート、ライブ等の空席救済を目的とした観劇鑑賞生活応援サイトです



そのサイトでは、自分の見たいタイトルの舞台の名前を入れると、そのチケットを渡してくれる人を探すことができるそうなのですが、毎日検索して確認するのが面倒だそうなので、これを毎日プログラムが取得して、まとめたデータをSlackに通知してくれたら便利じゃね?ってはなしになり、作ってみました。

2017-06-25

【Pythonで定期処理】 Cloud9を利用して、Seleniumでherokuから定期実行する

Python Cloud9を利用して、定期処理をherokuから行う




Cloud9というIDEを利用して、PythonからSeleniumを利用し、あるサイトでいいねを自動化するプログラムを作った。


これを定期実行を行いたい。検索してみると、crontabを使えば定期実行ができるようだが、cloud9上では実行できないらしい。


ほかの代替案を考えたとき、heroku schedulerを利用して定期実行を行えるのではと思い、やってみたらうまくいった。その時の作業ログを残しておく。特に詰まったところ。


手順としては


・bottleを使ってherokuにdeploy
・heroku schedulerに接続
・heroku schedulerに実行プログラムを入力

pythonプログラムをherokuにdeployする


実行したいプログラムをherokuにdeployする。herokuにdeployするところまでは下記参照。これ通りにやれば、ひとまずherokuにdeployするまではできまする。


【ローカル環境構築不要】Cloud9で作ったPythonのbottleアプリケーションをHerokuにdeployする - Qiita http://qiita.com/masaibar/items/86dd57efd50ab729ccf6


Selenium関係のインストール


あとは自分のseleniumを使うアプリケーションのファイルをcloud9上のrootディレクトリに保存する。


その後以下をインストールする。


$ pip install selenium
$ pip install crontab
$ npm install phantomjs


で、heroku上で環境を構築するために、requirements.txtを作成する。


$ pip freeze -l > requirements.txt

requirements.txtから、つかわない以下の項目を削除する。


ちなみに今回はここで詰まって、3日間解決できなかった。結局、scipyはherokuだと動かないらしい。なので、自分のアプリケーションとは関係ないmoduleは全部削除しておく。


matplotlib==1.3.1
pygobject==3.12.0
python-apt==0.9.3.5ubuntu2
python-dateutil==2.0
unattended-upgrades==0.1
scipy==0.13.3
numpy==1.8.2
requests==2.2.1
numpy==1.8.2


で、普通にgitにcommitした後に、herokuにpushすれば大丈夫。


$ git push heroku master

これでdeployがうまくいったみたい。


Heroku Schedulerと接続する



herokuスケジューラーを起動する。heroku schedulerはdeployしたファイルを定期実行してくれる。10minutes, hourly, dailyで実行を決められる。djangoとか使わなくても、シンプルなpythonプログラムをコマンドで実行できるので今回はこれを利用した。


$ heroku addons:create scheduler:standard



で、今度はherokuで実行するスケジュールをセットする


$ heroku addons:open scheduler


Opening https://addons-sso.heroku.com/apps/d5087dc6-6949-4335-bd42-3f13150fa199/addons/9a753940-5305-4b2e-b520-a7cc80f7655e...


実行するとこんな感じのURLが出てくる。


クリックするとタスクの設定画面に移動する。やりかたは下記参照。


簡単!Herokuで動くTwitter botをPythonで実装する - Qiita http://qiita.com/enomotok_/items/41275dd904c8aa774e72


こんな感じで、スクレーピングするプログラムを自動定期処理できることができました。Cloud9からできるのいいね!



Python データ分析入門マニュアルに戻る

注目の投稿

めちゃくちゃ久しぶりにこのブログ書いたw 更新3年ぶりw > 多様性というゲームは尊厳と自由を勝ち取るゲームなのかもしれないな。  もともとツイッターでツイートした内容なんだけど、ちょっと深ぼる。 ----- 自分は男 x 30代x 二児の父 x 経営者 x 都心(共働き世...