LolipopでGit Hubを使う

LolipopでPythonを動かすために、Windowsパソコンでプログラム作成→Git Hubへアップロード→Lolipopに持ってくるといった流れを作りました。その際の環境構築メモです。

ココでは、Git Hub→Lolipopの接続についてまとめています。パソコン→Git Hubの接続は「Git Hubを使う」の記事を参照してください。

ちなみに、SSHを使うので、Lolipopのプランが「スタンダードプラン」以上じゃないとだめです。エコノミーやライトだとSSHが使えません。

Lolipopと簡単に接続する環境づくり

まず、Win-Lolipopの接続について。SSHでLolipopと通信する際、毎回
ssh ユーザー名@サーバ -p ポート
と打つのが面倒なので、簡単にアクセスできるように環境を作ります。

ざっとした構築の流れは、パソコンで作った公開鍵をlolipopサーバにコピーするという手順なのですが、この「コピーする」でつまずきました。。。

$ ssh-copy-id -i ~/.ssh/id_rsa.pub -p 2222 <SSHアカウント名>@<サーバー名>
ERROR: Unable to negotiate with 133.130.35.108 port 2222: no matching host key type found. Their offer: ssh-rsa,ssh-dss

と、エラーになるんです。なので、手動で公開鍵ファイルを作ってます。ちなみに、私がVIエディタを使えないのでかなり遠回りなやり方です。

Lolipopのサーバ情報をメモ

ユーザー専用ページの左のリストから、サーバの管理・設定→SSH へ行って、そこに書かれている「サーバー」「アカウント」「接続ポート」「SSHパスワード」をメモってください。

Windowsパソコンでの作業

以下のようなファイルを作成し、「config」という名前(拡張子なし)で適当な場所に保存します。私はデスクトップに保存しました。サーバ名やアカウント名などは、上でメモした情報を入れます。また、ファイルはUTF-8で保存してください。

Host lolipop
  HostName     <サーバー>
  Port         <接続ポート>
  User         <アカウント>
  IdentityFile ~/.ssh/id_rsa

続いて、このファイルをSSHフォルダにコピーします。SSHのフォルダは、「Git Hubを使う」の記事で鍵を作ったときに、そのパスが出てきていると思います。大体は c:\users\ユーザー名\.ssh ですかね?

Git Bashでコピーするんだったら以下のような感じのコマンドです。

$ cp /c/users/ユーザー名/desktop/config ~/.ssh/

また、公開鍵(id_rsa.pubの中身)も後々使うので、ファイルをメモ帳などで開いておきましょう。

Lolipopでの作業

パワーシェルなどを起動し、LolipopとSSH通信を行います。

ちなみに、接続する際にssh専用パスワードが必要になります。上述の「lolipopのサーバ情報をメモ」の画面でパスワードが出ていると思うので、それをコピーしておきましょう。このパスワード入力が超絶面倒ですが、以下の設定が終われば入力不要になります。

Windowsキーを押して「powershell」と打ってエンターキーを押すと、PowerShellが起動するかと思うので、

$ ssh ユーザー名@サーバ名 -p 接続ポート

でlolipop内に入ります。私の場合、Git Hubと通信するためにすでに公開鍵を作っていたので、まずそのパスワードを入れて、次にlolipop固有のSSH用パスワードを入力しました。

lolipopに入ったら、まずルートの下に「.ssh」フォルダを作ります。

$ mkdir ~/.ssh

その中に入って公開鍵ファイルを手動で作るわけですが、私がVIエディタが使いない。。。ということで、FTPツールを使いました。

まずはlolipop FTPツールに行って、ルートフォルダにてファイルを新規作成してください。

ファイルの中身は、パソコンで作ったid_rsa.pubファイルの中身をまるっぽコピーして、ファイル名は「authorized_keys」にして保存します。権限まわりはデフォルトでOKです。

そのファイルを、.sshフォルダにコピーします。

cp ~/web/authorized_keys ~/.ssh/

これで何とか「パソコンーlolipop」の接続が簡単にできるようになりました。

いったん exit でlolipopを抜けた後、再度

ssh lolipop

と入力してください。SSHパスワード無し(rsaのパスワードは必要)でlolipopに入れれば成功です。

Lolipop – Git Hub間のSSH接続設定

基本的には、「Git Hubを使う」の記事で書いた設定方法と一緒です。

$ cd ~/.ssh
$ ssh-keygen -t rsa -C メルアド

その中身をCatとかで出して

cat id_rsa.pub

その中身をマルっとコピーし、Git HubのSSH設定画面に貼り付けましょう。貼り付け方は、「Git Hubを使う」の記事を参考にしてください。

また、ついでにリポジトリの画面からSSH接続用アドレスをコピっておいてください。(以下で使います)

Git Hubからプログラムダウンロード

~/webの下に、適当にフォルダを作ってください。

mkdir ~/web/testprogram

その中に入り、initし、リモート接続を作ります。

cd ~/web/testprogram
git init
git remote add 上でこぴったGitHubのSSHアドレス

あとは、引っ張ってくるだけ!

git pull origin master

これで、testprogramの中にファイル群がコピーされていれば成功です。

これでパソコン-Git Hub-lolipopがつながりました。

具体的な作業は、パソコンでプログラムを修正・追加し、Git Hubに上げ、それをlolipopで引っ張ってくる感じです。

<パソコン作業(Git Bash)>
$ git add *
$ git commit -c "コメント"
$ git push origin master

<lolipop作業(lolipopにSSHで入って作業)>
$ git pull origin master

よく使うコマンド

git bash などでよく使うコマンドメモ。

ごちゃごちゃしてきたら、いったんまるっとつくりかえ
$ git clone リポジトリのSSHアドレス

git add *で不要なファイルまで登録されたら、手動削除
$ git rm <ファイル名>
$ git rm -r <ディレクトリ名>

フォルダ内強制削除
rm -rf フォルダ名

リストをきれいに出力
ls -l

ファイル権限変更
chmod 700 file

Git Hubを使う

LolipopのレンタルサーバでPythonを動かす場合、Pythonプログラムのやり取りを頻繁に行う必要があります。それを効率的に行うため、いまさらながらGit Hubを使うようにしました。

Gitのインストール

まずはGitを自分のパソコンにインストールしましょう。

公式サイトからインストーラをダウンロードして、インストールしてください。インストール時にいろいろとオプションが選べますが、すべてデフォルト設定で大丈夫です。以下のサイトがとても丁寧にインストール手順を紹介されていました。

https://www.curict.com/item/60/60bfe0e.html

ショートカットアイコンの微調整

スタートメニューにあるショートカットを微調整します。大体は、以下のフォルダにGit関連のショートカットが保存されていると思います。

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Git

ここにある「Git Bash」を右クリック→プロパティを開いて、
– リンク先 : ”C:\Program Files\Git\git-bash.exe”(–cd-to-home を削る)
– 作業フォルダー : 自分が好きな作業場所
としましょう。これで、このアイコンでGit Bashを起動したら、自分が独自に作っているGit作業フォルダでGitが始まります。

ユーザー登録

Git Bashを起動して、名前やメルアドを登録しましょう。(最後の1行は確認用です)

git config --global user.name "******"
git config --global user.email ****
git config --list

今後、Windowsパソコン – Git Hub – Lolipopの間でやり取りが発生しますが、例えばcgiファイルのパーミッション(700)とかに影響を出さないため、Win環境ではパーミッションは無視するような設定にします。

git config core.filemode false

Gitの管理対象に追加

Gitの管理を行うプログラム群を保存する場所を決めましょう。私は
C:\Users\*****\Documents\git-ws
にしています。

その下に適宜フォルダを作って、そこにプログラムを置きましょう。私はgit-wsの下に
\python\mylibrary\testprogram
というフォルダを作りました。

Gitで、そのフォルダに行きます。

cd ./python/mylibrary/testprogram

そこで「git init」を実行したら、そこがGitの管理下に入ります。

git init

Git Hubの登録

Git Hubにアカウントを作成しましょう。アカウントの作成方法はいろいろと出ていると思うので、そちらをご参照ください。以下のサイトがとても親切に書いておられました。

https://codelikes.com/github-account-register/

登録が完了したら、リポジトリを作成しましょう。リポジトリ名は、上で作成したフォルダ(testprogram)に合わせましょう。

すると、上のほうに連携用アドレスが書かれた部分があると思うので、「HTTPS」を押して、HTTPS通信用のアドレスをコピーしてください。

HPPTSを押して、右端ボタンを押すとクリップボードにアドレスがコピーされます

プログラムのアップロード

これでGit Hubにパソコンで作ったプログラムをアップする準備が整いました。

Git Bashに戻って、以下のコマンドを流してください。

git add *
git commit -m "コメント(1st commitとか)"
git remote add https://*******(上でコピったアドレス)
git push origin master

ユーザーIDとパスワードを入れれば、Git Hubにファイル群がアップロードされます。Git Hubに行ってファイル群が来てるか確認してみましょう。

SSH通信でパスワード入力をなくす

いちいちパスワードを通すのが面倒くさいので、SSH通信にしましょう。

以下のサイトを参考にさせていただきました。

https://qiita.com/Sub_Tanabe/items/4e03dcf42e3b0d19bb66

Git Bash(パソコン)での作業

まず、Git Bashにいって、以下のコマンドを流してください。
ssh-keygen -t rsa -C youremailaddress@example.com

$ ssh-keygen -t rsa -C youremailaddress@example.com
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/********/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

Your identification has been saved in /c/Users/********/.ssh/id_rsa
Your public key has been saved in /c/Users/********/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:************* youremailaddress@example.com

sshに登録しておきます。

ssh-add ~/.ssh/id_rsa

以下のコマンドで、登録されたか念のため確認。
ssh-add -l

ログにある「pub」ファイルを開いて、そこにある文字列(ssh-rsaから始まってメルアドで終わってると思います)のすべてをまるっとコピーしてください。その公開鍵をGit Hubの設定画面に貼り付けます。ちなみに、以下のコマンドでもコピーできます。(エクスプローラとかでファイルを開かなくてもOK)

clip < ~/.ssh/id_rsa.pub

Git Hubでの作業

今度はまたGit Hubサイトで対象のリポジトリに行き、先ほど「HTTPS」のアドレスをコピったところで、今度は「SSH」アドレスをコピります。

Git Hubの右上にある自分のアイコンをクリックし、そこからSettingsをクリック。左のリストから「SSH and GPG keys」を選択。で、New SSH Keyという緑のボタンを押して、出てきた画面に公開鍵をコピペしてください。

またまたGit Bashでの作業

そのアドレスを登録します。まず、HTTPS通信で登録したアドレスを削除します。

git remote rm origin

念のためリスト確認。

git remote -v

次に、SSHアドレスの登録です。

git remote add origin コピったアドレス

試しにPushしてみましょう。

git push origin master

あとは、プログラムを修正・追加したら以下のコマンドを繰り返すだけでGit Hubにプログラムがアップロードされます。

git add *
git commit -m "コメント"
git push origin master

以上です。ご覧いただきありがとうございました。

FXのヒストリカルデータをPythonで取得

過去データをPythonでがさっと取得できるところのご紹介です。

いろいろ探したのですが、「日足しかない」「直近データしかない」など微妙なサイトが多くてなかなかいい塩梅のところが出てきませんでしたが、「HistData.com」というところが専用のPythonライブラリも用意してくれていて一番楽ちんにデータ取得できました。

https://www.histdata.com/

まず、PIPインストールしましょう。

pip3 install histdata

次はPythonコーディング。

まず、ZIPファイルをガサッと取得する部分です。ちなみに、去年までのデータは年間でまとめられているらしく、去年までのデータと今年のデータの取得方法がちょっと違います(根本は一緒)。

import pandas as pd

# HistData.Com専用ライブラリ
from histdata     import download_hist_data as dl
from histdata.api import Platform as P, TimeFrame as TF

#解凍用
import shutil 

pair = 'eurjpy'
y_first = 2018
y_last  = 2022

# ダウンロードしたファイル名を格納
fnlist = []
fn = ''

#--- メモ ---------------------------#
#   - 去年までのデータは年間でまとめられていらしい

#--- 去年までのデータ(「month=None」で取得) -------#
for y in range(y_first, y_last):
    print(y)
    try:
        #ZIPファイルのダウンロード
        fn = dl(
                    year=y
                  , month=None
                  , pair=pair
                  , platform=P.GENERIC_ASCII
                  , time_frame=TF.ONE_MINUTE
        )
        fnlist.append(fn)

        #解凍
        shutil.unpack_archive(fn, 'dir_out')
    except:
        print('error!')

#--- 今年の分を月ごとに取得
y = y_last
for m in range(1,13):
    print(y, m)
    try:
        fn = dl(
                    year=y
                  , month=m
                  , pair=pair
                  , platform=P.GENERIC_ASCII
                  , time_frame=TF.ONE_MINUTE
        )
        fnlist.append(fn)

        shutil.unpack_archive(fn, 'dir_out')
    except:
        print('error!')

次に形の成形。データのちょっとした注意点は以下の通りです。

  • 日時は「EST WITHOUT Day Light Savings」らしい
  • Tickか1分しかない(5分足とかない)

詳しくは以下のサイトをご参照。

これを踏まえて以下のようにコーディングしました。

#--- メモ ---------------------------#
#   - 日時は「EST WITHOUT Day Light Savings」らしい
#   - Tickか1分しかない(5分足とかない)

# ひな型(こいつに足していく)
data = pd.DataFrame([['', 0,0,0,0,0]])[:0]

for fn in fnlist :
    # 解凍後のファイル名に微修正
    fn = 'dir_out/' + fn[2:]
    fn = fn[:-4] + '.csv'
    print(fn)
    tmp_data = pd.read_csv(fn, header=None, delimiter=';')
    data = pd.concat([data, tmp_data])

# 成形        
data.columns = ['date', 'Open', 'High', 'Low', 'Close', 'dmy']
data = data.drop(columns=['dmy'])

data['date'] = pd.to_datetime(data.date)
data.date = data.date.dt.tz_localize('EST') #サマータイムなしのESTらしい

data = data.set_index('date')

# 扱いやすいよう、タイムゾーンをUTCにしておく
data = data.tz_convert('utc')

タイムゾーンが少々厄介でしたが、以下のサイトが非常にわかりやすく助かりました。

https://note.nkmk.me/python-pandas-tz-convert-tz-localize/
https://note.nkmk.me/python-datetime-pytz-timezone/

以上です。ご覧いただきありがとうございました。

GMailからLINEへ転送する② 特定のメール

以下の記事で、GMailをLINEへ転送する方法を書きました。

が、これでは、全件(もしくは固定キーワードでタイトル検索)転送されてしまいます。ウザいですよね。

というわけで、GMailの分類機能(ラベル)を使って特定のメールだけ転送するようにします。

準備1 GMailで「フィルタ」「ラベル」を作成

まずは仕分けのルールを作りましょう。「フィルタ」にひっかかったメールに「ラベル」を付ける作業です。ちなみにラベルとは、分類みたいなものです。

https://support.google.com/mail/answer/6579?hl=ja を参考に、LINEに転送したい条件でフィルタを作ってください。

その際、ラベルを設定するのを忘れずに!
僕は、LINE転送用の「toLINE」というラベルを作成しました。

準備2 GMail→LINEの転送機能を組み込む

以下の記事のように、GMail→LINEの転送機能を組み込みます。

準備3 プログラムの変更

Google Apps Scriptのプログラムを、1箇所だけ書き換えます。
(書き換えた後、保存ボタンを押すのを忘れずに)

24行目にある「検索条件指定」の部分に、「label:ラベル名」を付け加えます。
以下の例では、「toLINE」というラベルがつくメールをLINEへ転送するようになります。

<変更前>

<変更後> 「toLINE」の箇所を自分で作ったラベル名に置き換えてください。

そして保存ボタンを押せば、それで完成!!

これで、好きな条件でLINEへ転送できるようになりました。(条件を変えたい場合はGMAILのフィルタ/ラベルをいじればOk)

超便利!おにぎり君(キャプチャーソフト)

超便利!画面キャプチャーソフト「rapture」のご紹介です。
ささっと画面をキャプチャーして、それをパワポに貼ったり画像として保存したりすることって多くないですか?

raptureは、画面キャプチャーをとってもお手軽にさせてくれます。

また、インストール不要でダウンロードしてきたらそのまま使えるのもグッド。会社パソコンとかセキュリティがちがちでむやみにソフトがインストールできないですよね。そんな人でも使えます♪

ちなみに、タスクバーに固定で置いておくのがオススメ。

一つできないのが、「右クリックで出てくるメニューがキャプチャできない」ことです。そんなときはWindowsのスクリーンショットを使ってます。(上の画像とか)

僕は、タスクバーの左端に置いておいて、「Winキー+1」のショートカットでこいつを起動させ、サクッとキャプチャを撮ってます。

上の画像のようにおにぎり君(rapture)を配置しておけば、[Win+1]のショートカットでおにぎり君がサクッと立ち上がります。