Pepper의 HTTP 통신에 Requests 사용
8859 단어 Pepper
"눈앞에 있는 사람에게 Pepper의 움직임에 맞춰 재미있는 움직임을 받고, 그 모습을 Pepper의 카메라로 동영상에 촬영한다"라는 앱을 만드는 팀에 참가하게 했습니다.
자신은 동영상 업로드 서버의 개발과 Pepper⇔ 서버 간의 HTTP 통신 부분을 담당했습니다. 외부 라이브러리의 import 방법을 모르고 조금 시간을 줬으므로, 최종적으로 움직인 방법을 써 둡니다.
Pepper도 Python도 거의 아마추어이므로 츳코미를 받으면 고맙습니다.
Pepper에게 하고 싶었던 것
로컬 PC에 기동하고 있는 Rails로 만든 동영상 업로드 서버에, 촬영한 동영상 파일을 멀티 파트 업로드하고 싶었을 뿐입니다. curl 명령이라면
curl -F 'item[video]=@/SOMEDIR/FILE.avi' http://localhost:3000/api/items.json
입니다.
라이브러리를 사용하고 싶습니다.
urllib2라는 Python 라이브러리는 Pepper에서 사용할 수있는 것 같습니다. 하지만 더 쉽게 사용할 수 있는 라이브러리가 좋다. . 구그 하면 Python으로 HTTP 통신을 하는 것은, 요청 가 정평과 같기 때문에 이것을 사용하기로 했습니다.
> pip install requests
> python
Python 2.7.9 (default, Dec 19 2014, 06:00:59)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
>>> r = requests.get('https://api.github.com/repos/vmg/redcarpet/issues?state=closed')
>>> print r
<Response [200]>
>>>
사용하기 쉽습니다.
Pepper 박스 내에서 사용하는 방법
curl -F 'item[video]=@/SOMEDIR/FILE.avi' http://localhost:3000/api/items.json
urllib2라는 Python 라이브러리는 Pepper에서 사용할 수있는 것 같습니다. 하지만 더 쉽게 사용할 수 있는 라이브러리가 좋다. . 구그 하면 Python으로 HTTP 통신을 하는 것은, 요청 가 정평과 같기 때문에 이것을 사용하기로 했습니다.
> pip install requests
> python
Python 2.7.9 (default, Dec 19 2014, 06:00:59)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
>>> r = requests.get('https://api.github.com/repos/vmg/redcarpet/issues?state=closed')
>>> print r
<Response [200]>
>>>
사용하기 쉽습니다.
Pepper 박스 내에서 사용하는 방법
를 참고했습니다.
import
전에 PATH에 추가하면 좋을 것 같습니다. 프로젝트 전체에서 import
할 수 있었으면 좋겠습니다만, 이런 것일까요....라이브러리 배치
Bundler나 npm과 같이 프로젝트에서 사용하는 패키지나 모듈을 관리하는 방법을 잘 모르고, 이번에는 단순히 프로젝트 내에 디렉토리를 만들어 복사했습니다. .
(mac 환경에서 pip로 설치한 라이브러리는
/usr/local/lib/python2.7/site-packages/
에 있습니다.)> cd PEPPER_PROJECT_ROOT
> mkdir lib
> cp -r /usr/local/lib/python2.7/site-packages/requests ./lib/
Choregraphe를 열면
라고 듣기 때문에, 「모두에는 예(A)」를 선택합니다.
라이브러리 import
스니펫적으로는 이런 느낌인 것 같습니다.
import sys, os
# ライブラリまでのパスを取得
self.folderName = os.path.join(
self.framemanager.getBehaviorPath(self.behaviorId), "../lib")
# パスを追加
if self.folderName not in sys.path:
sys.path.append(self.folderName)
# 読み込み
import requests
파일 업로드
Pepper 앱으로 촬영한 동영상 파일(out.avi)이 html/에 저장되어 있다고 해서 그것을 htp://127.0.0.1:3000에 기동하고 있는 서버에 POST하는 코드는 이런 느낌이 들었습니다. Requests Quickstart 샘플 코드를 그대로 둡니다.
※여담입니다만, Rails의 WEBrick은
bin/rails s -b 0.0.0.0
와 -b 옵션을 붙이면, IP 주소로 액세스 할 수 있게 됩니다.
def onInput_onStart(self, p):
import sys, os
# ライブラリまでのパスを取得
self.folderName = os.path.join(
self.framemanager.getBehaviorPath(self.behaviorId), "../lib")
# パスを追加
if self.folderName not in sys.path:
sys.path.append(self.folderName)
# 読み込み
import requests
url = 'http://127.0.0.1:3000/api/items.json'
fileName = os.path.join(
self.framemanager.getBehaviorPath(self.behaviorId), "../html/out.avi")
f = { 'item[video]': open(fileName, 'rb') }
req = requests.post(url, files = f)
jsonData = req.json()
self.log(json.dumps(jsonData, indent = 4));
파이썬 커스텀 박스를 만들고 위 코드를 움직이면
[INFO ] behavior.box :log:287 _Behavior__lastUploadedChoregrapheBehaviorbehavior_1140386960576864__root__videoUpload_1: {
"item": {
"video": "http://localhost:3000/uploads/ce255e08-43c3-4911-be26-b93e2d591528.mp4"
}
}
이런 느낌의 로그가 출력되어 동작을 확인할 수 있었습니다.
Reference
이 문제에 관하여(Pepper의 HTTP 통신에 Requests 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/bugcloud/items/6631b2a534446393e214
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
bin/rails s -b 0.0.0.0
def onInput_onStart(self, p):
import sys, os
# ライブラリまでのパスを取得
self.folderName = os.path.join(
self.framemanager.getBehaviorPath(self.behaviorId), "../lib")
# パスを追加
if self.folderName not in sys.path:
sys.path.append(self.folderName)
# 読み込み
import requests
url = 'http://127.0.0.1:3000/api/items.json'
fileName = os.path.join(
self.framemanager.getBehaviorPath(self.behaviorId), "../html/out.avi")
f = { 'item[video]': open(fileName, 'rb') }
req = requests.post(url, files = f)
jsonData = req.json()
self.log(json.dumps(jsonData, indent = 4));
[INFO ] behavior.box :log:287 _Behavior__lastUploadedChoregrapheBehaviorbehavior_1140386960576864__root__videoUpload_1: {
"item": {
"video": "http://localhost:3000/uploads/ce255e08-43c3-4911-be26-b93e2d591528.mp4"
}
}
Reference
이 문제에 관하여(Pepper의 HTTP 통신에 Requests 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/bugcloud/items/6631b2a534446393e214텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)