0

Facebookにも投稿できるDjangoアプリケーションを開発しています。アプリケーション自体が作成した投稿を読むのに問題があります。

django-allauthincludesを使用して要求されたアクセス許可を考慮してpublish_actions、サンプル コードを確認します。

import open_facebook as ofb
import time

# the following app access token is retrieved by:
# curl -F type=client_cred -F client_id=<my_application_id> \
#      -F client_secret=<my_application_secret> \
#      https://graph.facebook.com/oauth/access_token
APP_ACCESS_TOKEN= "<my_application_id>|blahblah_blahblah"

MY_FACEBOOK_UID= "<my_facebook_user_id>"

fb= ofb.OpenFacebook(APP_ACCESS_TOKEN)

# this works fine! see output later
print("adding a post…")
data= fb.set("/%s/feed" % MY_FACEBOOK_UID,
        message="a test post, will be deleted\n" + time.asctime(),
        link="some_link_to_my_application",
        application="<my_application_id>")
print("data returned:")
print(data)
fbpost_id= data['id']

# this works too! it comes up empty, but I don't mind
print("getting feed…")
data= fb.get("/%s/feed" % MY_FACEBOOK_UID)
print("result:")
print(data)

# and this does not work.
print("getting post…")
data= fb.get(fbpost_id) # neither this or ("/%s" % fbpost_id) work
print("data returned:")
print(data)

上記のすべてにより、次の出力が生成されます。

adding a post…
data returned:
{'id': '<a_very_nice_id_thank_you_fb>'}
getting feed…
result:
{'data': []}
getting post…
FB request, error type <class 'urllib.error.HTTPError'>, code 400
Traceback (most recent call last):
  File "./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/lib/python3/dist-packages/django/core/management/__init__.py", line 354, in execute_from_command_line
    utility.execute()
  File "/usr/lib/python3/dist-packages/django/core/management/__init__.py", line 346, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/lib/python3/dist-packages/django/core/management/base.py", line 394, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/usr/lib/python3/dist-packages/django/core/management/base.py", line 445, in execute
    output = self.handle(*args, **options)
  File "/home/<blahblah>/management/commands/blahtest.py", line 41, in handle
    data= fb.get(fbpost_id)
  File "/usr/local/lib/python3.5/dist-packages/open_facebook/api.py", line 731, in get
    response = self.request(path, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/open_facebook/api.py", line 937, in request
    response = self._request(url, post_data)
  File "/usr/local/lib/python3.5/dist-packages/open_facebook/api.py", line 245, in _request
    parsed_response['error'].get('code'))
  File "/usr/local/lib/python3.5/dist-packages/open_facebook/api.py", line 338, in raise_error
    raise error_class(error_message)
open_facebook.exceptions.ParameterException: Unsupported get request. Object with ID '<a_very_nice_id_thank_you_fb>' does not exist, cannot be loaded due to missing permissions, or does not support this operation. Please read the Graph API documentation at https://developers.facebook.com/docs/graph-api (error code 100)

そのため、アプリケーション トークンは現在タイムラインに投稿できますが、投稿したものを取得することはできません。

アプリ トークンによって要求されたときにフィードが空であってもかまいません。このアプリによって作成されたすべての投稿 ID の記録があります。アプリケーションが投稿やいいねなどにアクセスし、アプリが作成した投稿に対してのみアクセスしたいだけです。

どうやってやるの?私は何が欠けていますか?

アップデート

user_postsユーザーに許可を求めてみました。これにより、/<uid>/feed空ではない結果が得られますが、3番目のステップはまだ失敗するため (ID で新しく作成された投稿を取得できません)、私の質問は引き続き適用されます。

4

1 に答える 1

0

次のように、単一の投稿を取得できます。facebook-sdk==2.0.0 をインストールし、アプリケーションの user_posts 権限を承認しました。これは usernum_postnum の形式です。

import facebook

graph_api = facebook.GraphAPI(access_token=access_token, version='2.7')
graph_api.request('<facebook_post_id>')
于 2016-09-08T18:12:23.530 に答える