Pythonのクイックスタート(v2)

更新しました

概要

ricloudのリファレンスオープンソースライブラリはPythonで実装され、GitHubでホストされています。

実装はドキュメントとそれがどのように使用されることができるかを示すサンプルスクリプトとバンドルされています。設定は、 ~/.ricloud.ini設定ファイルに、APIに対する認証用のtokenとサービスアクションの結果を収集するためのストリームエンドポイント値を指定して設定することに限定されます。

このライブラリのソースとドキュメントはGitHubにあります

必要条件

ricloudライブラリには、設計上非常に少ない要件しかありません。 Python 2.7れているほとんどのシステムで動作するはずPython 2.7リスナーモードを使用するには、 MySQL 5.7以降がさらに必要です。 本番環境でのオープンソースライブラリの使用方法については、本番環境でのサンプルクライアントの使用を参照してください。

インストール

ricloudライブラリは単一のコマンドでインストールできます。

$ pip install ricloud

MySQLへのデータの自動ダンプでリスナーモードを使用するには、 スキーマ設定スクリプトをローカルデータベースに適用する必要があります。これを使用して、データベースに必要なスキーマとテーブルを作成できます。

$ mysql -u root < sql/create_schema.sql

設定

APIは、 ricloud.iniファイルに保存されている一連のセキュリティ認証情報に依存しています。このパッケージには、デモンストレーション目的でAPIへの制限付きアクセスを可能にするデフォルト設定ファイルが付属しています。

デフォルトの認証情報は、ユーザーのHOMEディレクトリに.ricloud.iniという名前の上書きファイルを作成することで上書きできます。代わりに、 RICLOUD_CONF環境変数を設定して、設定ファイルのフルパスとファイル名を指定することもできます。

[mysql]
# Database config is only needed for listen mode.
host = 127.0.0.1
port = 3306
database = ricloud
username = your-ricloud-mysql-user-here
password = your-ricloud-mysql-password-here

[hosts]
api_host = https://asapi.reincubate.com
asmaster_host = https://asmaster.reincubate.com
stream_host = https://aschannel.reincubate.com

[endpoints]
account_information = /account/
register_account = /register-account/
task_status = /task-status/
result_consumed = /results-consumed/

[asmaster_endpoints]
list_services = /list-services/
list_subscriptions = /list-subscriptions/
subscribe_account = /subscribe-account/
perform_2fa_challenge = /perform-2fa-challenge/
submit_2fa_challenge = /submit-2fa-challenge/
list_devices = /list-devices/
subscribe_device = /subscribe-device/
resubscribe_account = /resubscribe-account/
unsubscribe_device = /unsubscribe-device/
unsubscribe_account = /unsubscribe-account/

[stream]
# This value provided by Reincubate.
stream_endpoint = your-aschannel-stream-name-here

[auth]
# This value provided by Reincubate.
token = your-ricloud-api-access-token-here

[output]
output_directory = output

[logging]
logs_directory = logs
time_profile = False
level = WARNING

[performance]
object_store_greenlets = 50

デフォルトのricloud.iniこのリポジトリにあります

コマンドラインパラメータ

--help引数が渡されると、ライブラリはコマンドライン引数の詳細を表示します。

$ python -m ricloud --help
ricloud API Client.

Usage, interactive mode:
    ricloud <account> [--password=<password>] [--timeout=<timeout>]

Options, interactive mode:
    -h --help               Show this screen.
    --timeout=<timeout>     How long should we wait for tasks to complete, in seconds. (default: 600s or 10 minutes)
    --password=<password>   The password for this account.

Usage, manager mode:
    ricloud --list-subscriptions <service> [--timeout=<timeout>]
    ricloud --subscribe-account <username> <password> <service> [--timeout=<timeout>]
    ricloud --perform-2fa-challenge <account_id> <device_id> [--timeout=<timeout>]
    ricloud --submit-2fa-challenge <account_id> <code> [--timeout=<timeout>]
    ricloud --resubscribe-account <account_id> <password> [--timeout=<timeout>]
    ricloud --unsubscribe-account <account_id> [--timeout=<timeout>]
    ricloud --list-devices <account_id> [--timeout=<timeout>]
    ricloud --subscribe-device <account_id> <device_id> [--timeout=<timeout>]
    ricloud --unsubscribe-device <account_id> <device_id> [--timeout=<timeout>]

Options, manager mode:
    -h --help               Show this screen.
    --timeout=<timeout>     How long should we wait for tasks to complete, in seconds. (default: 600s or 10 minutes)

Usage, listener mode:
    ricloud --listen [--timeout=<timeout>]

Options, listener mode:
    -h --help               Show this screen.
    --timeout=<timeout>     How long should we wait for tasks to complete, in seconds. (default: 600s or 10 minutes)

asapiとの対話モード

ライブラリの対話型モードは、Appleの2FAメカニズムと互換性のある方法でasapiを使用してさまざまなデータ型にアクセスする方法の例を示しています。

サンプルの対話型スクリプトを実行するには、次のコマンドを実行します。

$ python -m ricloud john.appleseed@reincubate.com --password=joshua

asmasterとManagerモード

ricloudサンプルライブラリには、コマンドラインサブスクリプション管理モードが付属しています。これにより、クライアントは必要に応じて手動でサブスクリプションを管理し、本番実装を構築する方法を実演できます。

これは、ユーザーが管理者モードを使用する方法のウォークスルーです。まず、これを行うときに何かがaschannelを聞いていることが重要です。

どの購読が登録されているのか見てみましょう。

{ "services": [{
    "name": "iCloud",
    "actions": [{
      "description": "",
      "parameters": [{
        "type": "string",
        "description": "",
        "optional": false,
        "name": "Device",
        "slug": "device"
      }, {
        "type": "date",
        "description": "",
        "optional": true,
        "name": "Since",
        "slug": "since"
      }],
      "name": "Fetch Data",
      "execution": "Asynchronous",
      "slug": "fetch-data",
      "permissions": {
        "data": ["sms"]
      }
    }],
    "slug": "icloud"
  }],
  "stream_endpoints": [{
    "host": "aschannel.reincubate.com",
    "protocol": "https",
    "uri": "/stream/"
  }]
}
python -m ricloud --list-subscriptions icloud
{u'accounts': [], u'success': True}

ありません。追加しましょう。この行を使ってモックデータアカウントを追加できます。

$ python -m ricloud --subscribe-account john.appleseed@reincubate.com joshua icloud

代わりに、2FAで保護されている実際のアカウントを追加しましょう。

$ python -m ricloud --subscribe-account john.appleseed@reincubate.com "xxxx" icloud
{
  "message": "This account has Multi Factor Authentication enabled, please select a device to challenge.",
  "data": {
    "trusted_devices": [
      "Challenge all 2FA devices"
    ]
  },
  "account_id": 133733,
  "success": false,
  "error": "2fa-required"
}

これは、 john.appleseed@reincubate.comは、 account_id133733が割り当てられており、そのアカウントに対する133733チャレンジが必要であることを意味します。

$ python -m ricloud --perform-2fa-challenge 133733 0
{u'message': u'Challenge has been submitted.', u'success': True}

これにより、エンドユーザーのデバイスで2FAプロンプトが表示され、認証コードが提供されます。それが123456だとしましょう。

$ python -m ricloud --submit-2fa-challenge 133733 123456
{u'account_id': 133733, u'success': True}

これで認証は成功し、アカウントは購読されました。つまり、デバイスを一覧表示して購読することができます。利用可能なものを見てみましょう:

$ python -m ricloud --list-devices 133733
{u'devices': [
  {u'ios_version': u'10.2', u'name': u'iPhone 7 Plus', u'colour': u'1', u'device_name': u'Johnny\'s iP7 iOS10 Black', u'latest-backup': u'2017-01-31 22:06:06.000000', u'model': u'D111AP', u'device_tag': u'3d0d7e5fb2ce288813306e4d4636395e047a3d28', u'serial': u'ABC123AAAAAA', u'device_id': 2},
  {u'ios_version': u'10.3.1', u'name': u'iPad Pro', u'colour': u'#e4e7e8', u'device_name': u'Johnny\'s iPad', u'latest-backup': u'2017-04-22 15:39:25.000000', u'model': u'J127AP', u'device_tag': u'b39bac0d347adfaf172527f97c3a5fa3df726a3a', u'serial': u'ABC123BBBBBB', u'device_id': 3},
  {u'ios_version': u'10.3.1', u'name': u'iPhone 7 Plus', u'colour': u'1', u'device_name': u'Johnny\'s other iPhone', u'latest-backup': u'2017-04-13 21:08:47.000000', u'model': u'D111AP', u'device_tag': u'a49bfab36504be1bf563c1d1813b05efd6076717', u'serial': u'DFVDASDDSVAS', u'device_id': 4}
], u'success': True}

どのデバイスが購読されているかも確認しましょう。

$ python -m ricloud --list-subscriptions
{
  "accounts": [
    {
      "status": "ok",
      "service": "icloud",
      "account_id": 133733,
      "devices": [
        {
          "status": "ok",
          "device_id": 2
        },
        {
          "status": "ok",
          "device_id": 3
        },
        {
          "status": "ok",
          "device_id": 4
        }
      ]
    }
  ]
}

これは、どのデバイスも購読していないことを示しているので、購読する必要があります。

$ python -m ricloud --subscribe-device 133733 2
{u'account_id': 133733, u'device_id': 2, u'success': True}

これらのステップが完了すると、 john.appleseed@reincubate.comおよび選択したデバイスからのデータは、準備ができたときに自動的にチャネルに流れます。

同じアカウントを2回購読しようとすると、次のようなエラーが返されます。

$ python -m ricloud --subscribe-account john.appleseed@reincubate.com josha icloud
{
  "message": "You are already subscribed to receive content for this account.",
  "account_id": 133733,
  "success": false,
  "error": "asmaster-account-already-active"
}

aschannelを使用したリスナーモード

ricloudリスナーは、API用にローカルにデプロイされたリスナーメカニズムです。基本的には、クライアントが自分のクラウドやdatacentreにサービスをインストールすることを可能にし、それは自動的にAPIから受け取ったデータをローカルのデータベースとファイルシステムに挿入します。

リスナーは自動的にAPIからデータをデチャンクし、フィード結果とメタデータをローカルデータベースに挿入し、ファイルをファイルシステムに保存します。リスナーはオープンソースであり、ユーザーが自由に変更できます。共有ファイルシステムのストレージに書き込みをしたり、クライアントの本番データストアにデータを挿入するように変更したりすることも含めて、使用できる戦略は多数あります。

受信したファイルをディスクに書き込むだけでなく、リスナーのデータベースには、受信したすべてのデータのテーブルがあります。

  • feed :フィードモジュールからのJSONデータとメタデータはここに格納されます
  • file :ファイルポインタとメタデータはここに格納されています
  • message :情報メッセージはここに保管されています
  • system :システムメッセージはここに格納されます

受信しているデータを理解し、それを処理するためには、これらのテーブルを定期的にスキャンして新しいレコードを探すことが重要です。クライアントアプリケーションは、すでに読み取った、またはインポートした行を単純に削除する可能性があります。

ランニング

リスナープロセスは次のコマンドで起動できます。

$ python -m ricloud --listen

メッセージとシステム通知の解釈

:メッセージとシステム通知が自動的に2つの表に保管されmessagesおよびsystem 。これらのメッセージは、ストリーム経由で送信された後に保存されます。これらのメッセージの大部分は純粋に情報提供的なものですが、重要なものもあります。

メッセージ

  • ユーザートークンが期限切れです。トークンの更新が必要です。
  • ユーザーアカウントがロックされています。トークンの更新が必要です。
  • その他のデータアクセスエラー対処は不要です。

システム通知

最も一般的なシステムメッセージはシステムメッセージに記述されています 。それらはストリームから読み続ける問題を示します。

フィードデータへのアクセス

リスナーは受信した各フィードをfeedテーブルに格納します。主なフィールドは以下のとおりです。

  • received :フィードが取得された日付
  • account_id :フィードに関連するアカウントID。
  • device_id :フィードに関連するデバイスID。
  • body :JSON形式のフィード

ファイルを取得する

リスナーは受け取ったファイルごとにデータベースにエントリを作成し、実行シェルの現在のパスを基準にして、 output/filesフォルダ内のファイルシステムにファイルを書き込みます。

mysql> SELECT id, received, account_id, device_id, location, file_id FROM file LIMIT 1000;
+----+---------------------+------------+-----------+--------------------------------------+---------+
| id | received            | account_id | device_id | location                             | file_id |
+----+---------------------+------------+-----------+--------------------------------------+---------+
|  1 | 2017-04-14 15:38:39 |       NULL |      NULL | 91f49a4f-3368-4350-ae90-a944d4652fbe |         |
|  2 | 2017-04-14 15:38:40 |       NULL |      NULL | 9b0381b6-244d-4d82-8198-57798d89a379 |         |
|  3 | 2017-04-14 15:38:41 |       NULL |      NULL | b9ccd1ed-8d80-4b33-be99-a3a7f1af73ce |         |
|  4 | 2017-04-14 15:38:42 |       NULL |      NULL | b3666148-a17e-4ca8-90db-975e1850a72b |         |
+----+---------------------+------------+-----------+--------------------------------------+---------+
4 rows in set (0.00 sec)
$ ls -l output/files
-rw-r--r-- 1 renate 1143 Apr 14 13:47 91f49a4f-3368-4350-ae90-a944d4652fbe
-rw-r--r-- 1 renate 2866 Apr 14 14:09 9b0381b6-244d-4d82-8198-57798d89a379
-rw-r--r-- 1 renate 2866 Apr 14 15:18 b9ccd1ed-8d80-4b33-be99-a3a7f1af73ce
-rw-r--r-- 1 renate 1143 Apr 14 13:49 b3666148-a17e-4ca8-90db-975e1850a72b

ファイルはフィードデータによってのみコンテキストが与えられるため、開始する場所はフィードエントリによって参照されるfile_idです。

データベース内のfileテーブルには、以下のキーフィールドがあります。

  • received :ファイルが検索された日付。
  • account_id :ファイルに関連するアカウントID。
  • device_id :ファイルに関連するデバイスID。
  • location :リスナーのディスク上のファイルの場所
  • file_id :ファイルのID。

リスナーデータベースの管理

どのリスナーテーブルにも、リスナーの動作にとって重要なデータが含まれていません。したがって、いったんデータがクライアントアプリケーションによって消費されると、クライアントはデータを自由に削除することができます。

同様に、ダウンロードしたファイルはいつでも自由に削除できます。

どのように我々は助けることができます?

サポートチームがお手伝いします!

営業時間は月曜日から金曜日の午前9時から午後5時(GMT)です。 時間は現在 5:10 PM GMTです。

1営業日以内に、お返事を差し上げます。メールアドレスはこちら。

サポートセクションに移動 › エンタープライズチームに連絡する ›
私たちの素晴らしいサポートチーム

© 2008 - 2019 Reincubate Ltd. 無断複写・転載を禁じます。 イングランドとウェールズに登録 #5189175, VAT GB151788978. Reincubate®は登録商標です。 プライバシーと利用規約. マルチファクタ認証をお勧めします。 ロンドンで愛と建てられた。