Pepper HTTP 통신 메모

12636 단어 Pepper
Pepper에서 Get, Post 통신을 할 수 있었으므로 잊지 않기 위해 메모.

GET 요청



간단하게 사용자 이름을 서버에 가져 가는 것입니다.
URL에 사용자 ID를 매개변수로 보냅니다.

Choregraphe는 이런 느낌입니다.


처리 흐름
1. Pepper에게 번호(사용자 ID)를 말한다(1~4)
2.Switch로 1~4의 어느 쪽인지를 판별한다
3. Python Script 박스(HTTP GET)로 서버에 사용자 이름을 Get하러 간다.
4. HTTP 통신 시간이 15초를 지나면 타임아웃한다(Wait 박스).
5. HTTP GET 중에서 응답이 정상으로 돌아오고 있다면, Success Say, 실패의 경우는 Failure Say

※Switch에 의해 인도되는 값은, GET때에 사용하는 파라미터라고 생각해 주세요.

파이썬 스크립트 상자의 코드

HTTPGET
import urllib2, json

class MyClass(GeneratedClass):
    def __init__(self):
        GeneratedClass.__init__(self)

    def onLoad(self):
        self.userName = None

    def onUnload(self):
        #put clean-up code here
        pass

    def onInput_onStart(self, p):
        #pは、ユーザーのID
        if  len(str(p)) > 0:
            #GETのURL(URL+パラメーター)
            url = "https://example.com/users/" + str(p)

            try:
                r = urllib2.urlopen(url)

                #ルートのJSONデータ
                root = json.loads(r.read())

                #必要な項目をUTF8でエンコードする
                self.userName = root["user"]["userName"].encode("utf-8")

                #userNameがあればデータあり、なければなし(今回の仕様)
                if len(self.userName) > 0:
                    self.logger.info(self.userName)
                    self.onSuccess(self.userName)
                else:
                    self.onFailure()

            except urllib2.HTTPError, e:    #HTTPエラー
                self.logger.info(e.msg)
                self.onFailure()

            except urllib2.URLError, e:    #サーバーに接続できない場合
                self.logger.info(e)
                self.onFailure()

        else:
            self.logger.info("failure")
            self.onFailure()

    def onInput_onStop(self):
        self.onUnload() #it is recommended to reuse the clean-up as the box is stopped
        self.onStopped() #activate the output of the box


POST 요청



사용자 정보를 업데이트하기 위한 POST 처리

사용하기 전에 requests 모듈을 프로젝트에 설치하십시오. (설치 방법은 참고를 참조)
타임 아웃 등은 GET과 동일한 방법을 사용한다.
아래 POST를 할 때 Python Script 상자 코드

HTTPPOST
import requests

class MyClass(GeneratedClass):
    def __init__(self):
        GeneratedClass.__init__(self)

    def onLoad(self):
        self.memory = ALProxy("ALMemory")
        self.pts = None
    def onUnload(self):
        #put clean-up code here
        pass

    def onInput_onStart(self):
        #Pepperのメモリの中に格納された情報でサーバーのユーザー情報を書き換える
        #self.pts = self.memory.getData("Sample/P")
        #userId = self.memory.getData("Sample/UserId")

        #更新する情報
        payload = {
            "userId":"1",
            "points":6
        }

        #POSTのURL
        self.url = "https://example.com/points/"

        try:
            self.r = requests.post(self.url, data=json.dumps(payload))
            self.logger.info(self.r.status_code)    #ステータスコードの取得
            self.logger.info("success")
            self.onSuccess()    #成功したときの処理へ(出力の名前)

        except requests.exceptions.RequestException as e:    #例外発生
            self.logger.info("failure")
            self.logger.info(e)
            self.onFailure()    #失敗したときの処理へ(出力の名前)



    def onInput_onStop(self):
        self.onUnload() #it is recommended to reuse the clean-up as the box is stopped
        self.onStopped() #activate the output of the box

참고
POST Requests 모듈 설치
h tp : // 쿠이타. m / hththt / ms / 14bfc2bf23192b020371

POST의 Request 모듈 사용법
h tp : // Rekue sts - cs - 그럼. Red d. cs. 이오 / 엔 / 아 st / 우세 r / 쿠이 cks rt /

좋은 웹페이지 즐겨찾기