2011-04-27 9 views
4

Foursquareのv2を使用して、ユーザーが特定の会場にサインインできるようにしています。私は要求に署名しようとしていますが、これまでのところ、私は、次のフォースクエアユーザーチェックインV2

u'meta': { 
    u'errorType': u'param_error', 
    u'code': 400, 
    u'errorDetail': u'Invalid checkin id' 
}, 
u'response': { 

} 
} 

私は次のようにそれはやっている方法を取得しています、モバイルユーザーは、会場のIDを持つ私のWebページとユーザーIDにリクエストを送信します次のようにウェブ・ハンドラは、次の

 venueID = self.request.get("venue") 
     user = self.request.get("user") 
     params = {  
        'oauth_token': user 
     } 
     consumer = oauth2.Consumer(key=keys.CLIENT_ID,secret=keys.CLIENT_SECRET) 
     params.update({'signature': hunchMethods.sign_request(params, keys.CLIENT_SECRET)}) 
     check_in_req = "https://api.foursquare.com/v2/checkins/" + venueID + "?" + urllib.urlencode(params) 
     print check_in_req 

     url1 = fetch(check_in_req) 
     json_response = simplejson.loads(url1.content.encode('utf-8')) 
     print json_response 

私の署名要求方法はあるん

def sign_request(query_dict, data): 
    queries = sorted((unicode(k).encode('utf-8'), unicode(v).encode('utf-8')) 
         for k,v in query_dict.iteritems()) 
    data = urllib.urlencode(queries) + data 

UPDATE@Drewへのおかげで私は、これは私が何かをしないのです:-(何もしていないようですが、私は、私は私の更新私のコードは

def post(self, info): 
     venueID = self.request.get("venue") 
     user = self.request.get("user") 
     venue = venue_id_change.retrieveNewID(venueID, user) 
     url = "https://api.foursquare.com/v2/checkins/add?venueId=" +venue+ "&oauth_token=" + user + "&broadcast=private" 
     logging.info(url) 
     url1 = fetch(url) 
     json_response = simplejson.loads(url1.content.encode('utf-8')) 

なければならないので、間違った方法を実装しようとしていたことに気づきましたか?

+0

あなたは 'sign_request'メソッドで実際にリクエストに署名していません。あなたは単にクエリ文字列に秘密キーを追加しています。 HMACを使ってはいけませんか?または、既存のoauthライブラリを使用してリクエストを作成し、署名を自分で計算する必要はありませんか? –

答えて

2

あなたは間違ったAPIメソッドを使用しているようです。

The method you're usingは、チェックインIDを受け取り、既存のチェックインの詳細を返します。

This oneは会場IDを取得し、新しいチェックインを作成します。

+0

私はhttps://api.foursquare.com/v2/checkins/y?oauth_token=xをリクエストするなど、私が使用しようとしていたあなたの返事をありがとうございます。「無効なチェックインID」を取得しました。正しいリクエストレイアウトは何でしょうか? :-) – Stina

+0

POSTをhttps://api.foursquare.com/v2/checkins/addに追加し、リクエスト本体の中にパラメータとしてvenueまたはvenueIdを含めます。 –

+0

この返答を返すべきかどうかは明らかですが、POSTリクエストに関する経験はほとんどありませんが、何も返さない:-( – Stina