SSブログ
Pythonista ブログトップ

Pythonistaでgitを使う [Pythonista]

プログラムのソース管理である Github に Pythonistaから直接アクセスして、
作ったプログラムを登録してみた。

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
nice!(0)  コメント(1) 

PythonistaでSonyのデジカメのリモートコントロール [Pythonista]

Wifiに繋がるソニーのデジカメはWifi経由でカメラをコントロールするための
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を作ってやれば、写真を撮るアプリが出来そう。


nice!(0)  コメント(4) 
Pythonista ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。