Instagram gem とリアルタイム API で興味深い動作が見られました。サブスクリプションを作成し、Instagram の応答を処理するための基本的なアプリを作成しようとしています。以下は、サブスクリプションを作成し、タグ名をデータベースに保存するコードです。
def create
@subscription = Subscription.new params[:subscription]
options = {:object_id => params[:subscription][:tag_name]}
if @subscription.save
Instagram.create_subscription('tag', "http://myapp.herokuapp.com/subscriptions/process_subscription/", aspect = 'media', options)
redirect_to "/subscriptions/tag/#{@subscription.tag_name}"
end
コールバック URL が到達可能な heroku にあることに注意してください。興味深いのはsubscriptions/new
、heroku ドメインにアクセスすると、Instagram API から「Bad Request, Unable to reach callback URL」というメッセージが表示されることです。同じコールバック URL を使用して curl でサブスクリプションを作成すると、すべてが期待どおりに機能しsubscriptions/new
、(同じコールバック URL が設定された) ローカルホストに移動すると、期待どおりに機能します。以下は process_subscription アクションです。
def process_subscription
if params["hub.challenge"]
render :text => params["hub.challenge"]
else
PrivatePub.publish_to("/subscriptions/tag/#{params[:object_id]}", payload: params[:_json])
end
end
最初の if ステートメントは、pubsubhubub チャレンジを処理します。サブスクリプションが実際に作成されると、ペイロードの受信と処理に問題はありません。だから今私が考えることができる唯一のことは、私がherokuドメインにいるとき、Instagramがそれに返信するときにサーバープロセスが何らかの形でビジーであることです.
サブスクリプションが成功した場合と失敗した場合のサーバー ログへのリンクを次に示します。これらのログで post パラメータをログアウトしていたことに注意してください。https://gist.github.com/4256108 .