楽天アフィリエイトの料率改正のメールが届いた。
【重要なご案内】楽天アフィリエイトの料率について(2021/01/28)
このたび、楽天アフィリエイトの一部の成果対象サービスにつきまして
2021年4月1日(木)より商品ジャンル別の成果報酬料率を変更することとなりましたのでお知らせいたします。【変更点】
商品ジャンル別の成果報酬料率が最大4%となります。
アフィリエイトサイト管理人は泣く泣く従うしかない。
ファッション系サイトを保有していた管理人は単純に収入が半分になることを意味してる。
私のサイトでもアフィリエイトリンクを貼っている。
でも、収益は月に100円も収入が無いけどね。
ショボいわー。
その代わり本業を頑張ってるからね!
源泉徴収見てみよう。
昨年度より 9万円アップ
ショボいわー。
一昨年度より 115万円 ダウン
ギャーーー!
知らなかった・・・。
課長・部長が変わってからじゃねーか!!
当時
「これ、絶対バズって流行る!」
と思いながら作成した「Yahooのコメントランキング」サイト。
アフィリエイトで大成功したらどうしよう?
そうだ、早めにドメインを取っておかなきゃ!
と、ぐるぐると思考を巡らせていたのだが・・・
アクセス数が少ない
定期的に炎上する
処理が重たすぎて自動更新できない
という管理人泣かせなページだから5年以上自動更新を放置していた。作ったのは10年以上前だ。
さくらインターネットでは重い・長い処理は自動的にKillされる。
このため、集計者数が増えたことで少しずつ処理が重くなったこともあり、自動更新がずっと止まっていた。
Windowsのタスク処理スクリプトを株価更新目的で作成しているので、応用してサクッと用意してみる。
ssh接続&処理実行を行う方法
遠隔ログインして、そのログイン上の端末で実行処理を行う。
「そんなの無理じゃね?」
と昔は思っていたが「expect」というコマンドが存在することを数年前に知った。
目に鱗だったけど、使ってなかった。
遠隔PCにログインしてソースコードを落としてきて自動ビルドを走らせる・・・とか用途は沢山ありそうだと当時思ったけど、
そもそもログイン先のPC上で cron 設定すれば良いので、思いの外 用途が限定的だった。
PythonからSOCKSプロキシを通してssh接続&処理実行を行う
Pythonからssh接続を行うためには paramiko というライブラリをインストールする必要がる。
また、SOCKSプロキシ経由でリモートサーバへ接続を行う必要がある場合は、Pysocksというライブラリをインストールする。
1 2 |
pip install paramiko pip install PySocks |
これらを組み合わせたスクリプトは次のようになる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# coding: utf8 # SSH&SOCKSプロキシを通してリモートサーバ接続を実行 import paramiko import socks import socket # 修正箇所 ================================== USERNAME = "" PASSWORD = "" IP_ADDRESS = "" PORT = 22 PROXY_HOST = "" PROXY_PORT = 1080 COMMAND = "ls -a" # ここまで ================================== if (PROXY_HOST != ""): # Proxyサーバの情報を引数として、socks.socksocketオブジェクトを生成 socks.set_default_proxy(socks.SOCKS5, PROXY_HOST, int(PROXY_PORT)) # socketオブジェクトを2で生成したsocks.socksocketで上書き socket.socket = socks.socksocket with paramiko.SSHClient() as ssh: # 「Are you sure you want to continue connecting (yes/no) 」と表示されても接続 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # ssh接続 ssh.connect(IP_ADDRESS, port=int(PORT), username=USERNAME, password=PASSWORD, timeout=30) # コマンド実行 stdin, stdout, stderr = ssh.exec_command(COMMAND) # コマンド実行後に標準入力が必要な場合 # stdin.write('password\n') # stdin.flush() # 実行結果を表示 for o in stdout: print('[std]', o, end='') for e in stderr: print('[err]', e, end='') |
実行すると次のように返ってきた。
1 2 3 4 5 6 7 8 9 10 11 |
[std] YahooRanking.py [std] __pycache__ [std] beautifulsoup4-4.3.1 [std] css [std] csv [std] excel [std] img [std] index.html [std] index.mdl [std] index.php [std] index.py |
お!簡単に実現できたぞ!
error: Microsoft Visual C++ 14.0 is required. Get it with “Build Tools for Visual Studio”
pip を利用して次のようなエラーが出ることがある。
1 |
error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/ |
エラーに書いてある通り「Visual C++ Build Tools」をインストールすることで解決できる。
「Visual Studio 2019のツール」から「Build Tools for Visual Studio 2019」をダウンロードする。
error: command ‘cl.exe’ failed: No such file or directory
「Build Tools for Visual Studio 2019」をインストールしても、普通にCMDウインドウを立ち上げて実行するだけでは、同じエラーで失敗する。
1 |
error: command 'cl.exe' failed: No such file or directory |
スタートから「VC2019用X64_x86Cross Toolsコマンドプロンプト」を起動して「pip install」を行うことで「cl.exe」にパスが通った状態となる。
‘openssl/opensslv.h’:No such file or directory
このエラーに対しては、Windows OS用のOpenSSLをインストールした。
「Win64 OpenSSL v*.*.1i」をダウロード&インストールする。
そして、Cygwinではなくコマンドプロンプト上でパス設定を行い pip コマンドを打つと正しくインストールが完了した。
1 2 3 |
set LIB=C:\Program Files\OpenSSL-win64\lib;%LIB% set INCLUDE=C:\Program Files\OpenSSL-win64\include;%INCLUDE% c:\Python37\Scripts\pip.exe install paramiko |
[おまけ] PHPでファイルの表示順序を日付の降順にする
拍子抜けレベルで問題なく動作したので、ついでに気になっていたログの表示順序も変更。
ググると何でも見つかるなー。
今は、こんな感じの実装になっている。
1 2 3 4 5 6 7 8 |
$dir = "../mydir/"; $dh = opendir($dir); // get file names while (false !== ($filename = readdir($dh))) { if($filename !="." AND $filename !=".."){ echo "<li>".substr($filename, 0, -4)."</li>"; } } |
これを次のように変更する。
1 2 3 4 5 6 7 |
$dir = "../mydir/"; chdir($dir); array_multisort(array_map('filemtime', ($files = glob("*.*"))), SORT_DESC, $files); foreach($files as $filename) { echo "<li>".substr($filename, 0, -4)."</li>"; } |
うん、問題なさそう。
こんな感じで、ずっーと小さい修正をコツコツ実施している。
まとめ
たった40行で実現できるのに、2年間手動でやってたよ・・・。
でも、忘れっぽい性格なので月に2回程度の頻度だったけど。
最近、副産物ばかり作っている気がするけど、株売買の自動化はどうなったんだっけ?