Python의 빠른 시작 (v2)

업데이트 됨

개요

ricloud 의 참조 오픈 소스 라이브러리는 Python 으로 구현되고 GitHub에서 호스팅됩니다.

이 구현은 설명서 및 사용 방법을 보여주는 샘플 스크립트와 함께 번들로 제공됩니다. 구성은 ~/.ricloud.ini 구성 파일에 API에 대한 인증 token 을 지정하고 서비스 조치 결과를 수집하는 스트림 엔드 포인트 값을 지정하는 것으로 제한됩니다.

이 라이브러리의 소스 및 문서는 GitHub에서 찾을 수 있습니다.

요구 사항

ricloud 라이브러리는 설계 상 요구 사항이 거의 없습니다. Python 2.7 대부분의 시스템에서 실행되어야합니다. 리스너 모드 를 사용하려면 MySQL 5.7 이상이 필요합니다. 프로덕션 환경 에서 Open Source 라이브러리 사용에 대한 견해를 보려면 프로덕션에서 샘플 클라이언트 사용을 참조하십시오.

설치

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 와의 대화식 모드

라이브러리의 대화식 모드는 asapi 를 사용하여 Apple의 2FA 메커니즘과 호환되는 방식으로 다양한 데이터 유형에 액세스하는 방법을 보여줍니다.

샘플 대화 형 스크립트를 실행하려면 다음 명령을 실행하십시오.

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

asmaster사용한 관리자 모드

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 , 그 계정에 대한 2FA 도전이 필요합니다 :

$ 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 데이터와 선택한 장치가 자동으로 준비된 대로 aschannel 로 다운됩니다.

동일한 계정을 두 번 구독하려고하면 다음과 같은 오류가 반환됩니다.

$ 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에 대해 로컬에서 배포 된 리스너 메커니즘입니다. 기본적으로 클라이언트는 API에서 수신 한 데이터를 로컬 데이터베이스 및 파일 시스템에 자동으로 삽입하는 자체 클라우드 또는 데이터 센터에 서비스를 설치합니다.

리스너는 API의 데이터를 자동으로 dechunks하고, 피드 결과와 메타 데이터를 로컬 데이터베이스에 삽입하고, 파일 시스템에 파일을 저장합니다. 리스너는 오픈 소스이며 사용자가 자유롭게 수정할 수 있습니다. 공유 파일 시스템 저장소에 쓰기를하거나 클라이언트의 프로덕션 데이터 저장소에 데이터를 삽입하도록 수정하는 등의 다양한 전략을 사용할 수 있습니다.

청취자의 데이터베이스는 디스크에 수신되는 모든 파일을 기록 할뿐만 아니라 DB에 제공된 모든 데이터에 대한 테이블을 가지고 있습니다.

  • feed : 피드 모듈의 JSON 데이터 및 메타 데이터가 여기에 저장됩니다.
  • file : 파일 포인터와 메타 데이터가 여기에 저장됩니다.
  • message : 여기에 정보 메시지가 저장됩니다.
  • system : 여기에 시스템 메시지가 저장됩니다.

수신되는 데이터를 이해하고 이에 따라 행동하기 위해서는 이러한 테이블을 정기적으로 스캔하여 새 레코드를 검색하는 것이 중요합니다. 클라이언트 응용 프로그램은 이미 읽거나 가져온 행을 단순히 삭제할 수 있습니다.

달리는

리스너 프로세스는 다음 명령으로 시작할 수 있습니다.

$ python -m ricloud --listen

메시지 및 시스템 통지 해석

메시지 및 시스템 통지는 자동으로 두 개의 테이블에 저장됩니다 messagessystem . 이러한 메시지는 스트림을 통해 전송 된 후에 저장됩니다. 이 메시지의 대부분은 정보 용이지만 일부는 중요합니다.

메시지

  • 사용자 토큰이 만료되었습니다. 토큰 새로 고침이 필요합니다.
  • 사용자 계정이 잠겼습니다. 토큰 새로 고침이 필요합니다.
  • 데이터를 액세스하는 다른 오류. 아무런 조치가 필요 없습니다.

시스템 고지

가장 보편적 인 시스템 메시지는 시스템 메시지에 설명되어 있습니다 . 스트림에서 계속 읽는 문제를 나타냅니다.

피드 데이터 액세스

리스너는 수신 한 각 피드를 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시 (그리니치 표준시)입니다. 시간은 현재 6:35 오전 GMT입니다.

우리는 1 일 이내에 모든 메시지에 답장하고자합니다.

지원 섹션으로 이동 › 엔터프라이즈 팀에 문의하십시오. ›
우리의 멋진 지원 팀

© 2008 - 2019 Reincubate Ltd. 판권 소유. 영국과 웨일즈에 등록 #5189175, VAT GB151788978. Reincubate®는 등록 상표입니다. 개인 정보 및 이용 약관. 우리는 2FA를 권장합니다. 런던에서 Built로 지어졌습니다.