0

Realtime Updates API으로 내 앱에 대한 구독을 설정하려고했지만 몇 가지 문제가있었습니다. 내가 적절하게 문서를 다음과 HTTP GET 및 POST를 처리하는 아마존 EC2 인스턴스에 플라스크 엔드 포인트를 구성한Python의 Facebook 실시간 업데이트 구독 확인

{"error":{"message":"(#2200) callback verification failed: Operation timed out after 6000 milliseconds with 0 bytes received","type":"OAuthException","code":2200}} 

: 우선, 이것은 내가 점점 계속 오류입니다. 수동으로 구독 코드를 호출하기 위해 내가 직접 조회하고 엔드 포인트를 종료합니다.

curl -i -X GET http://public-ip-of-ec2:5000/subscribe 

위의 컬은/내 EC2 인스턴스에 가입의 경로 플라스크 응용 프로그램에서 실행되는 스크립트를 호출합니다. access_token, object, fields, verify_token 및 callback_url을 포함한 필수 쿼리 문자열 매개 변수를 사용하여 POST를 수행하려면 파이썬 HTTP 라이브러리 requests을 사용하고 있습니다.

VERIFY_TOKEN = 'my_verify_token' 

@app.route('/subscribe') 
def subscribe(): 
    global VERIFY_TOKEN 
    FB_CLIENT_ID = 'my_app_id' 
    # access_token is sent as a query string parameter 
    APP_ACCESS_TOKEN = 'my_app_access_token' 

    # object, fields, callback_url, and verify_token are sent as urllib.urlencode([('param','val')]) 
    CALLBACK_URL = 'http://my-public-ec2-ip:5000/' 

    payload_url = "https://graph.facebook.com/{0}/subscriptions".format(FB_CLIENT_ID) 
    payload = {"access_token": APP_ACCESS_TOKEN, "object": "user", "fields": "feed", "verify_token": VERIFY_TOKEN, "callback_url": CALLBACK_URL} 
    r = requests.post(payload_url, data=payload) 
    return r.text 


@app.route('/', methods=['GET','POST']) 
def handle_requests(): 
    global VERIFY_TOKEN 
    if request.method == 'GET': 
     mode = request.args.get('hub.mode') 
     challenge = request.args.get('hub.challenge') 
     verification = request.args.get('hub.verify_token') 

     # if we have our verification token back echo the challenge back to facebook 
     if verification == VERIFY_TOKEN: 
      return challenge 

    elif request.method == 'POST': 
     # do some stuff with the updates 

나는 왜 { "오류"를 받고 있어요에 같은 혼란 스러워요 : { "메시지": "(# 2200) 검증이 실패 콜백 : 작업받은 0 바이트로 6000 밀리 초 후 시간 초과" "유형": "OAuthException", "코드": 내 플라스크 응용 프로그램을 불 때 2200}}

나는 페이스 북 IP 주소 인 173.252.110.113에서 GET 요청을 볼 수 있기 때문이다. 필자는 테스트를 위해 테스트를 내 로그에 인쇄하여 정확한 데이터를 반향시키고 있는지 제대로 테스트했습니다. 따라서 코드는 Facebook이 구독을 확인하는 데 필요한 챌린지를 반환하고 그 시점에서 구독이 성공해야하지만 앞서 언급 한 오류가 발생합니다. 아마도 ec2 보안 그룹이나 무언가에 대한 권한을 추가해야하는 보안 문제 일 수 있습니까?

미리 도움을 청하십시오!

답변

2

답변 : 사전 경고없이

페이스 북은 문제의 그 요청이 처리되는 방법이 없습니다 플라스크 개발 서버, 따라서 타임 아웃 엔드 포인트에 여러 요청을 보냅니다. 나는 그 이론을 테스트하기 위해 소수의 노동자들과 함께 gunicorn 서버를 가동 시켰으며, 지금은 성공적인 서브 스크립 션 검증을 얻었 기 때문에 사실로 판명되었습니다. 다른 사람이 플라스크에이 문제를 가진 경우 :

$ sudo pip install gunicorn 
$ which gunicorn 
/usr/local/bin/gunicorn 


# fire up your endpoint with a few gunicorn workers to handle the load 
# facebook tests our endpoint with (we will use 4 workers on port 5000) 
# my_app is your_app_name.py without the .py part  

$ /usr/local/bin/gunicorn -w 4 -b my-local-ipv4-ip:5000 my_app:app 
0

"https://graph.facebook.com/ {0}/구독".format (FB_CLIENT_ID를)

는 GET 방식으로 현재 구독을 얻기위한 것입니다


시도해 볼 수있는 새로운 구독을 만드십시오.

"https://graph.facebook.com/ {0} /"형식 (FB_CLIENT_ID)

POST 방법으로 --- 가져 오기 : 구독 정보 끝 URL에

관련 문제