4

この質問は以前にもありましたが、ソリューションの多くは廃止されており、GraphAPI の要件により、多くのソリューションが不適切になっているようです。私は fbpy、facebook、oauth、oauth2 パッケージをいじり、それらの例を調べましたが、それでも機能させる方法がわかりません。私はこれまで使用してきたコードやパッケージのいずれにも信頼を置いておらず、機能することがわかっている決定的な解決策を誰かが持っているかどうか疑問に思っています。ありがとう。

4

4 に答える 4

4

最初に行う必要があるのは、ログインフローを理解することです。さまざまなFacebookライブラリを簡単に切り替えることができるかどうかを理解する必要があります。したがって、実装に基づいて非常に単純なコードに対して非常に冗長なコードを持つことができます。

次に、OAuthの処理を実装するさまざまな方法と、PythonでWebアプリを表示および起動するさまざまな方法があります。ブラウザを押さずに承認する方法はありません。それ以外の場合は、access_tokenをコードにコピーして貼り付ける必要があります。

web.pyWebアプリのプレゼンテーションrequests.pyを処理し、GraphAPIHTTP呼び出しを処理することを選択したとします。

import web, requests

次に、すべてのリクエストが通過するURLを設定します

url = (
'/', 'index'
)

次に、使用するアプリケーションID、シークレット、およびログイン後のURLを取得します

app_id = "YOUR_APP_ID"
app_secret = "APP_SECRET"
post_login_url = "http://0.0.0.0:8080/"

このコードにはindex、ロジックを処理するための1つのクラスがあります。このクラスではcode、ログイン後にFacebookが返す承認を処理します

ログインフロー

user_data = web.input(code=None)
code = user_data.code

ここから、条件を設定してチェックしますcode

if not code:
    # we are not authorized
    # send to oauth dialog
else:
    # authorized, get access_token

「許可されていない」ブランチ内で、ユーザーをダイアログに送信します

dialog_url = ( "http://www.facebook.com/dialog/oauth?" +
                           "client_id=" + app_id +
                           "&redirect_uri=" + post_login_url +
                           "&scope=publish_stream" )

return "<script>top.location.href='" + dialog_url + "'</script>"

それ以外の場合は、受け取ったものaccess_tokenを使用して抽出できますcode

token_url = ( "https://graph.facebook.com/oauth/access_token?" +
                          "client_id=" + app_id +
                          "&redirect_uri=" + post_login_url +
                          "&client_secret=" + app_secret +
                          "&code=" + code )
            response = requests.get(token_url).content

            params = {}
            result = response.split("&", 1)
            for p in result:
                (k,v) = p.split("=")
                params[k] = v

            access_token = params['access_token']

ここから、フォームなど、ステータスを更新するための呼び出しをどのように処理するかを選択できます。

graph_url = ( "https://graph.facebook.com/me/feed?" +
"access_token=" + access_token )

return ( '<html><body>' + '\n' +
         '<form enctype="multipart/form-data" action="' +
         graph_url + ' "method="POST">' + '\n' +
         'Say something: ' + '\n' +
         '<input name="message" type="text" value=""><br/><br/>' + '\n' +
         '<input type="submit" value="Send"/><br/>' + '\n' +
         '</form>' + '\n' +
         '</body></html>' )

またはface.pyを使用する

from facepy import GraphAPI
graph = GraphAPI(access_token)
try:
    graph.post(
            path = 'me/feed',
            message = 'Your message here'
    )
except GraphAPI.OAuthError, e:
    print e.message

したがって、最終的には、次のようなスリム化されたバージョンを取得できます。

import web
from facepy import GraphAPI
from urlparse import parse_qs

url = ('/', 'index')

app_id = "YOUR_APP_ID"
app_secret = "APP_SECRET"
post_login_url = "http://0.0.0.0:8080/"

user_data = web.input(code=None)

if not user_data.code:
    dialog_url = ( "http://www.facebook.com/dialog/oauth?" +
                               "client_id=" + app_id +
                               "&redirect_uri=" + post_login_url +
                               "&scope=publish_stream" )

    return "<script>top.location.href='" + dialog_url + "'</script>"
else:
    graph = GraphAPI()
    response = graph.get(
        path='oauth/access_token',
        client_id=app_id,
        client_secret=app_secret,
        redirect_uri=post_login_url,
        code=code
    )
    data = parse_qs(response)
    graph = GraphAPI(data['access_token'][0])
    graph.post(path = 'me/feed', message = 'Your message here')

詳細については、を参照してください

* Facebook API-ユーザーフィード:http
://developers.facebook.com/docs/reference/api/user/#feed * Facebookの写真をPythonで公開–基本ソース:http://philippeharewood.com/facebook/publish -a-facebook-photo-in-python-the-basic-sauce /
*FacebookとPython–基本的なソース:http://philippeharewood.com/facebook/facebook-and-python-the-basic-sauce/

于 2012-11-15T13:16:48.777 に答える
3

facepyを使用した可能な (テスト済みの) 解決策の 1 つ:

  1. 新しいアプリケーションを作成するか、以前に作成した既存のアプリケーションを使用します。
  2. アプリケーションの拡張アクセス許可を持つGraph API エクスプローラーを使用して、ユーザー アクセス トークンを生成します。status_update
  3. 前の手順で作成したユーザー アクセス トークンをfacepyで使用します。

    from facepy import GraphAPI
    
    ACCESS_TOKEN = 'access-token-copied-from-graph-api-explorer-on-web-browser'
    
    graph = GraphAPI(ACCESS_TOKEN)
    graph.post('me/feed', message='Hello World!')
    
于 2012-11-14T09:22:57.133 に答える
2

このブログも試してみてください。fbconsoleアプリを使用しています。

ブログのコード:

from urllib import urlretrieve
import imp
urlretrieve('https://raw.github.com/gist/1194123/fbconsole.py', '.fbconsole.py')
fb = imp.load_source('fb', '.fbconsole.py')
fb.AUTH_SCOPE = ['publish_stream']
fb.authenticate()
status = fb.graph_post("/me/feed", {"message":"Your message here"})
于 2013-02-16T21:27:24.873 に答える
1

これが私がそれを機能させる方法です。このためのアプリを作成する必要はまったくありません。ステータスの更新をプロフィールと Facebook ページに投稿する方法を説明します。

まず、ステータスの更新をプロフィールに投稿するには:

https://developers.facebook.com/tools/explorerにアクセスします。
その前に Access Token が書かれたテキストボックスが表示されます。このテキストボックスの横にある [アクセス トークンを取得] ボタンをクリックします。アクセス トークンのさまざまな権限を求めるポップアップが開きます。基本的に、これらのアクセス許可は、このトークンを使用して Graph API を介して実行できるすべてのことを定義します。必要なすべての権限の横にあるチェック ボックスをオンにします。そのうちの 1 つがステータスを更新します。
facepy モジュールをインストールします。最善の方法は、pip install を使用することです。
この後、任意の .py ファイルに次のコード スニペットを挿入します。

from facepy import GraphAPI

access_token = 'YOUR_GENERATED_ACCESS_TOKEN'
apiConnection = GraphAPI(access_token)
apiConnection.post(path='me/feed',
                            message='YOUR_DESIRED_STATUS_UPDATE_HERE')

この .py ファイルを標準の python の方法で実行し、Facebook をチェックしてください。YOUR_DESIRED_STATUS_UPDATE_HEREFacebook のプロフィールに投稿されたことが表示されます。

次に、自分の Facebook ページで同じことを行うには:

手順は、アクセス トークンの生成を除いてほぼ同じです。
これで、Facebook ページへの投稿に同じアクセス トークンを使用できなくなりました。新しいものを生成する必要がありますが、Graph API を初めて使用する人にとっては少し難しいかもしれません。必要な作業は次のとおりです。

同じ developers.facebook.com/tools/explorer ページに移動します。

「Graph API Explorer」を示すドロップダウンを見つけてクリックします。ドロップダウンから、更新を投稿するページを選択します。このページの新しいアクセス トークンを生成します。このプロセスは次の場所で説明されています。拡張権限タブで manage_pages 権限を確認することを忘れないでください。

ここで、前に使用したのと同じコードでこのトークンを使用して実行します。

あなたのフェイスブックページに行きます。YOUR_DESIRED_STATUS_UPDATEあなたのページに投稿する必要があります。

お役に立てれば!

于 2014-02-08T14:38:00.200 に答える