お金にまつわる日常のブログ

妻と息子を持つ40代後半の一般的なサラリーマンのお金にまつわる日常の記録です。
日々の家計管理から、不動産や株式・FXなどの投資について綴っていきます。

Pythonは簡単ですごい

ビットコインのアービトラージシステムはPythonと言うプログラミング言語で作っています。何度かPythonは素晴らしいということを書いていますが、少しPythonについて紹介したいと思います。


私の素晴らしいと思う点は”何でも簡単にできる”と言うことです。


例えば、YahooのWebページにアクセスするには以下の2行だけです。

>>> import requests

>>> r = requests.get("http://www.yahoo.co.jp")

1行目のimport文でrequestsと言うHTTPライブラリを利用する準備をして、2行目のrequests.get()でURLを指定してWebページにアクセスすることができます。


requests.get()の戻り値(この場合はr)から以下のようにデータを得られます。

>>> r.status_code

200

>>> r.text

u'{<!DOCTYPE HTML PUBLIC "...'

Pythonはインタープリタ型なので、1行ずつコマンドを入力しながら結果を確認することができます。上記の >>> はコマンドプロンプトで、r.status_codeと入力すると、200(HTTPリクエストが正常終了したというステータスコード)の結果を得られています。r.textはリクエストの応答でHTMLドキュメントです。



実際にビットコインの取引を行うためには、APIキー(秘密鍵)を事前に取得して、Postリクエストに幾つかのパラメータ(通貨ペアや注文価格、注文数量など)と秘密鍵による署名やナンス値を付けて、アクセスします。



もう一つ Pythonの例として、WindowsやMacだけでなく様々な機器で動くことです。RaspberryPiのような小さなシングルボードコンピュータにもプリインストールされていますし、iPhoneではPythonistaと言うアプリ(1200円)を入れるとPythonが使えます。


iPhoneのカメラで写真を撮るのは、以下の2行だけです。カメラアプリが起動されて、シャッターを押すと、ファイル名"temp.jpg"に保存されます。

import photos

img = photos.capture_image('temp.jpg')


標準のカメラアプリを使わずに、AVFoundationのAPIを呼び出して、カメラを直接制御することもできます。画面インターフェースも自分で作る必要がありますが、何でもできます。たとえば背面カメラの映像をプレビューするには、入力デバイスと出力デバイスの流れを管理するキャプチャセッションを作ってから、入力デバイスに背面カメラ、出力デバイスにプレビュー画面を設定します。

from objc_util import *


session = ObjCClass('AVCaptureSession').alloc().init() 

session.setSessionPreset_('AVCaptureSessionPresetHigh') 


inputDevices = ObjCClass('AVCaptureDevice').devices()

inDev = inputDevices[0]   # 0:背面カメラ、1:前面カメラ

Input=ObjCClass(

'AVCaptureDeviceInput').deviceInputWithDevice_error_(inDev, None)

session.addInput_(Input)


previewLayer = ObjCClass(

'AVCaptureVideoPreviewLayer').alloc().initWithSession_(session)


// 本当はここにユーザインタフェース(UI)に関する処理が必要


session.startRunning()

iPhoneのAPIはObjective-Cの形式となっているため、Pythonから呼び出すには少し手間がかかりますが問題ありません。1行目でObjective-Cに関連するライブラリを準備して、呼び出す際には ObjCClass('AVCaptureSession')のように記述します。


上記の例では、'AVCaptureSession'でキャプチャセッションを作り、
'AVCaptureDevice'で使用できる入力デバイスを検索して、'AVCaptureDeviceInput'で入力デバイスとして登録、'AVCaptureVideoPreviewLayer'でプレビュー画面を出力デバイスとして登録しています。


キャプチャセッションのすごいところは、入力デバイスと出力デバイスを複数登録できることです。たとえば、入力デバイスとして背面カメラ、前面カメラ、マイクなどを同時に登録することができます。ただし背面カメラと前面カメラの同時撮影はできません。出力デバイスはプレビュー画面だけでなく動画ファイルや写真ファイルに同時に出力することができます。


最後はPythonと言うよりも、iPhoneのプログラミングになってしまいましたが、Pythonを使うと色々なことが簡単にできるという紹介でした。興味のある方は、チャレンジしてみてください。



×

非ログインユーザーとして返信する

あと 2000文字

※は必須項目です。