Pythonistaでgitを使う [Pythonista]
プログラムのソース管理である Github に Pythonistaから直接アクセスして、
作ったプログラムを登録してみた。
1. まずはgithub にアカウントの登録
https://github.co.jp/ でアカウントを登録し、
その後に "New repository" から新しいレポジトリを作っておく。
するとそのレポジトリは "https://github.com/アカウント名/レポジトリ.git" でアクセス出来るようになる。
2. Pythonista で git を使う環境 stash をインストールする
Pythonista を起動し、画面の右から左へスワイプするとコンソール画面が出るので、
そこで、
とするとインストールが始まるので、
と出るのを待つ。
終わったらPythonistaを再起動(ホーム画面ダブルタップからPythonistaを上へスワイプして終了し、再度起動する)
するとPythonistaのホームに "launch_stash.py" が配置されるので、それを選択して実行すると、
シェルが起動する。
3. gitを使ってみる
stash を起動して、githubに登録したいファイルのあるディレクトリに移動する。
git の初期化をする。
なにやらエラーが出てうまく動いていない様子。
調べてみたけど的を得た解答が見つからなかったけど、ふとPython 2.7で実行することを思いつく。
stashを実行するときに実行ボタンを長押しするとPython 2.7を選択できるので、そこから実行し、
gitの初期化をしてみる。
エラーが出なくてうまく動いている様子。ls -a で見ると ".git" ディレクトリも出来ているので、うまく出来た。
まずはローカルレポジトリにファイルを追加して、commitする。
その後 Github へ登録してみる。
うまく出来たようなので、Webからgithubへアクセスしてファイルを確認してみると、
ちゃんとソースが登録されていた。
Pythonistaから直接githubへアクセス出来るのはすごいな~
stash は普通のシェルだから、Pythonista上でプログラムのコピーは面倒なんだけど、
stash でディレクトリを作ってファイルコピーすればバックアップも簡単に出来る。
便利。
作ったプログラムを登録してみた。
1. まずはgithub にアカウントの登録
https://github.co.jp/ でアカウントを登録し、
その後に "New repository" から新しいレポジトリを作っておく。
するとそのレポジトリは "https://github.com/アカウント名/レポジトリ.git" でアクセス出来るようになる。
2. Pythonista で git を使う環境 stash をインストールする
Pythonista を起動し、画面の右から左へスワイプするとコンソール画面が出るので、
そこで、
import requests as r; exec(r.get('http://bit.ly/get-stash').text)
とするとインストールが始まるので、
Installation completed.
と出るのを待つ。
終わったらPythonistaを再起動(ホーム画面ダブルタップからPythonistaを上へスワイプして終了し、再度起動する)
するとPythonistaのホームに "launch_stash.py" が配置されるので、それを選択して実行すると、
シェルが起動する。
3. gitを使ってみる
stash を起動して、githubに登録したいファイルのあるディレクトリに移動する。
$ cd (directory)
git の初期化をする。
git init .
なにやらエラーが出てうまく動いていない様子。
gittle already exists funky already exists
調べてみたけど的を得た解答が見つからなかったけど、ふとPython 2.7で実行することを思いつく。
stashを実行するときに実行ボタンを長押しするとPython 2.7を選択できるので、そこから実行し、
gitの初期化をしてみる。
git init .
エラーが出なくてうまく動いている様子。ls -a で見ると ".git" ディレクトリも出来ているので、うまく出来た。
まずはローカルレポジトリにファイルを追加して、commitする。
git add (ファイル名) git commit
その後 Github へ登録してみる。
git push https://github.com/(アカウント名)/(レポジトリ).git
うまく出来たようなので、Webからgithubへアクセスしてファイルを確認してみると、
ちゃんとソースが登録されていた。
Pythonistaから直接githubへアクセス出来るのはすごいな~
stash は普通のシェルだから、Pythonista上でプログラムのコピーは面倒なんだけど、
stash でディレクトリを作ってファイルコピーすればバックアップも簡単に出来る。
便利。
タグ:Pythonista GitHub
PythonistaでSonyのデジカメのリモートコントロール [Pythonista]
Wifiに繋がるソニーのデジカメはWifi経由でカメラをコントロールするための
Camera Remote APIを公開しているので、
iPhone上で動くPythonistaから接続を試してみた。
1. SSDPでデジカメの接続先を探す
iPhoneをデジカメのWifiに接続して、SSDPを送ることでカメラのIPアドレスと
接続するURLを調べられるようだ。
ということでPythonistaからSSDPを送ってみる。
実行してみたけどtimeoutしてデジカメが検出出来なかった。
不思議なことにiPhoneをデジカメのWifiに繋いでも、iPhoneのWifi接続マークが出なくて、
"4G"のままになっていた。けど状態でソニーが作ったデジカメをコントロールするアプリはちゃんと動くし、さらに普通にネットにも繋がってるという、両方に繋がっている状態に見える。
よくわからない状態だったので、ネットで調べてると接続先URLを見つけたのでそこへ接続することにした。
後で分かったことだけど、デジカメにWifiで繋ぐと、デジカメのIPは10.0.0.1、iPhoneのIPは10.0.1.1となっているが、
デフォルトゲートウェイが設定されていないせいで、SSDPの通信はデジカメに行かないでインターネット側に送っていたらしい。
iPhoneの"4G"の通信を止めてやることで、上のプログラムを実行するとデジカメから反応があった。
このLOCATIONに書いてあるURLにアクセスすると、カメラをコントロールするためのURLを返してくれるらしい。
2. デジカメのコントロール
JSONでカメラをコントロールするためのコマンドを書いてURLへ送ることでカメラが動いてくれるらしい。
試しにシャッターを切るコマンドを送ってみた。
ちゃんとシャッターを切ってくれた。
これでカメラをコントロール出来るようになった。
後はシャッターボタンとかのUIを作ってやれば、写真を撮るアプリが出来そう。
Camera Remote APIを公開しているので、
iPhone上で動くPythonistaから接続を試してみた。
1. SSDPでデジカメの接続先を探す
iPhoneをデジカメのWifiに接続して、SSDPを送ることでカメラのIPアドレスと
接続するURLを調べられるようだ。
ということでPythonistaからSSDPを送ってみる。
import socket MSEARCH_REQUEST_LINES = ( 'M-SEARCH * HTTP/1.1', 'HOST: 239.255.255.250:1900', 'MAN: "ssdp:discover"', 'MX: %(timeout)s', 'ST:urn:schemas-sony-com:service:ScalarWebAPI:1', '', '' ) timeout = 5 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.settimeout(timeout) req = '\r\n'.join(MSEARCH_REQUEST_LINES) % {'timeout': timeout} sock.sendto(bytes(req, encoding='utf-8'), ('239.255.255.250', 1900)) while True: try: res, device = sock.recvfrom(4096) print('----------- from %s' % (device,)) print(res) print('-----------') except socket.timeout: print("timeout") break sock.close()
実行してみたけどtimeoutしてデジカメが検出出来なかった。
不思議なことにiPhoneをデジカメのWifiに繋いでも、iPhoneのWifi接続マークが出なくて、
"4G"のままになっていた。けど状態でソニーが作ったデジカメをコントロールするアプリはちゃんと動くし、さらに普通にネットにも繋がってるという、両方に繋がっている状態に見える。
よくわからない状態だったので、ネットで調べてると接続先URLを見つけたのでそこへ接続することにした。
後で分かったことだけど、デジカメにWifiで繋ぐと、デジカメのIPは10.0.0.1、iPhoneのIPは10.0.1.1となっているが、
デフォルトゲートウェイが設定されていないせいで、SSDPの通信はデジカメに行かないでインターネット側に送っていたらしい。
iPhoneの"4G"の通信を止めてやることで、上のプログラムを実行するとデジカメから反応があった。
b'HTTP/1.1 200 OK CACHE-CONTROL: max-age=1800 EXT: LOCATION: http://10.0.0.1:64321/scalarwebapi_dd.xml SERVER: UPnP/1.0 SonyImagingDevice/1.0 ST: urn:schemas-sony-com:service:ScalarWebAPI:1 USN: uuid:00000000-xxxx-xxxx-xxxx-xxxxxxxx::urn:schemas-sony-com:service:ScalarWebAPI:1 X-AV-Physical-Unit-Info: pa=""; pl=; X-AV-Server-Info: av=5.0; hn=""; cn="Sony Corporation"; mn="SonyImagingDevice"; mv="1.0";
このLOCATIONに書いてあるURLにアクセスすると、カメラをコントロールするためのURLを返してくれるらしい。
2. デジカメのコントロール
JSONでカメラをコントロールするためのコマンドを書いてURLへ送ることでカメラが動いてくれるらしい。
試しにシャッターを切るコマンドを送ってみた。
import json import requests SONY_CAMERA_URL = 'http://10.0.0.1:10000/sony/camera' def sony_cam_control_1 (): req_body = json.dumps({ 'method' : 'actTakePicture', 'params' : [], 'id' : 1, 'version': '1.0' }) res = requests.post(SONY_CAMERA_URL, data=req_body) #print("%s" %(res)) print(res.json()) return res.json() ret = sony_cam_control_1()
ちゃんとシャッターを切ってくれた。
これでカメラをコントロール出来るようになった。
後はシャッターボタンとかのUIを作ってやれば、写真を撮るアプリが出来そう。