2010-06-17 29 views
36

का उपयोग करने के लिए प्रोग्रामेटिक रूप से एक्सेस टोकन प्राप्त करना मैं फेसबुक ग्राफ एपीआई के साथ खेलने के लिए एक बैश या पायथन स्क्रिप्ट को एक साथ रखने की कोशिश कर रहा हूं। एपीआई का उपयोग करना आसान लग रहा है, लेकिन मुझे अधिकृत करने और access_token को कॉल करने के लिए मेरी बैश स्क्रिप्ट में कर्ल सेट करने में समस्या हो रही है। क्या किसी के पास एक कामकाजी उदाहरण है?फेसबुक ग्राफ एपीआई

उत्तर

33

कभी भी देर से बेहतर नहीं, शायद अन्य लोग इसे खोज लेंगे। मुझे मैकबुक पर पायथन 2.6 के साथ काम करना पड़ा।

यह

  • अजगर फेसबुक मॉड्यूल स्थापित करने की आवश्यकता है: https://github.com/pythonforfacebook/facebook-sdk,
  • की स्थापना की एक वास्तविक फेसबुक ऐप
  • और प्रोफाइल आप पोस्ट करना चाहते अनुमति देने के लिए उचित अनुमतियां दी गई है चाहिए करने के लिए पढ़ने और लिखने जैसी सभी अलग-अलग चीजें।

आप फेसबुक डेवलपर दस्तावेज़ों में प्रमाणीकरण सामग्री के बारे में पढ़ सकते हैं। विवरण के लिए https://developers.facebook.com/docs/authentication/ देखें।

इस ब्लॉग पोस्ट भी इस के साथ मदद कर सकता है: http://blog.theunical.com/facebook-integration/5-steps-to-publish-on-a-facebook-wall-using-php/

यहाँ जाता है:

#!/usr/bin/python 
# coding: utf-8 

import facebook 
import urllib 
import urlparse 
import subprocess 
import warnings 

# Hide deprecation warnings. The facebook module isn't that up-to-date (facebook.GraphAPIError). 
warnings.filterwarnings('ignore', category=DeprecationWarning) 


# Parameters of your app and the id of the profile you want to mess with. 
FACEBOOK_APP_ID  = 'XXXXXXXXXXXXXXX' 
FACEBOOK_APP_SECRET = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' 
FACEBOOK_PROFILE_ID = 'XXXXXX' 


# Trying to get an access token. Very awkward. 
oauth_args = dict(client_id  = FACEBOOK_APP_ID, 
        client_secret = FACEBOOK_APP_SECRET, 
        grant_type = 'client_credentials') 
oauth_curl_cmd = ['curl', 
        'https://graph.facebook.com/oauth/access_token?' + urllib.urlencode(oauth_args)] 
oauth_response = subprocess.Popen(oauth_curl_cmd, 
            stdout = subprocess.PIPE, 
            stderr = subprocess.PIPE).communicate()[0] 

try: 
    oauth_access_token = urlparse.parse_qs(str(oauth_response))['access_token'][0] 
except KeyError: 
    print('Unable to grab an access token!') 
    exit() 

facebook_graph = facebook.GraphAPI(oauth_access_token) 


# Try to post something on the wall. 
try: 
    fb_response = facebook_graph.put_wall_post('Hello from Python', \ 
               profile_id = FACEBOOK_PROFILE_ID) 
    print fb_response 
except facebook.GraphAPIError as e: 
    print 'Something went wrong:', e.type, e.message 

त्रुटि टोकन हो रही बेहतर हो सकता है की जाँच कर, लेकिन आप क्या करना है के विचार मिलता है।

+0

कौन सा पायथन फेसबुक मॉड्यूल? वहां कई हैं। :/ –

+2

आधिकारिक एक! आप इसे गिटहब से प्राप्त कर सकते हैं: https://github.com/facebook/python-sdk मैंने लिंक को शामिल करने के लिए उत्तर अपडेट किया। – maryisdead

+2

धन्यवाद, हालांकि "यह एसडीके बहिष्कृत है।" –

1

यहां Python Code है। आदेश पंक्ति पर these examples कुछ चलाने का प्रयास करें, वे मेरे लिए ठीक काम करते हैं। यह भी देखें - http://www.pythonforfacebook.com/

+0

धन्यवाद, मैंने देखा है कि, लेकिन मैं योग्य स्वतंत्र स्क्रिप्ट की तलाश में हूँ। यह एक Django ऐप का हिस्सा है या कुछ नहीं है? – justinhj

+0

गीथब रेपो को हटा दिया गया है – Alvin

8

आपको पहले set up an application की आवश्यकता है। निम्नलिखित तो पहुंच टोकन थूक से बाहर होगा आपके आवेदन आईडी और गुप्त दिया:

> curl -F type=client_cred -F client_id=[...] -F client_secret=[...] https://graph.facebook.com/oauth/access_token 
6

के बाद से एक वेब ब्राउज़र वास्तविक प्राधिकरण के लिए शामिल किए जाने की जरूरत है, वहाँ एक "स्टैंडअलोन स्क्रिप्ट" कि यह होता है जैसी कोई चीज नहीं है सब। यदि आप केवल एपीआई के साथ खेल रहे हैं, या खुद को स्वचालित करने के लिए एक स्क्रिप्ट लिख रहे हैं, और अपने लिए access_token चाहते हैं जो समाप्त नहीं होता है, तो आप यहां एक को पकड़ सकते हैं: http://fbrell.com/auth/offline-access-token

+0

धन्यवाद कि बहुत आसान – justinhj

+0

@daaku है इसलिए उपयोगकर्ता के लिए एक समाप्त एक्सेस टोकन को पुन: उत्पन्न करने के लिए मुझे अपने वेब ब्राउज़र को फेसबुक पर रीडायरेक्ट करने की आवश्यकता है (मुझे लगता है कि फेसबुक पहचानने के लिए अपनी स्वयं की कुकीज़ पढ़ सकता है उपभोक्ता)? – Neil

+0

बहिष्कृत, मुझे लगता है कि वे स्वचालित उपकरण की अनुमति नहीं देना चाहते हैं। किसी ऐसे व्यक्ति के रूप में जो उन्हें विकसित करने की ज़रूरत है, केवल प्रमुख वेबसाइटों द्वारा इस कदम को परेशान कर रहा है ... –

6

ऐसा करने का एक तरीका है, मैंने इसे पाया है, लेकिन यह बहुत काम है और आपको ब्राउज़र को 100% खराब करने की आवश्यकता होगी (और आप उनकी सेवा की शर्तों को तोड़ने की संभावना होगी)

क्षमा करें मैं सभी विवरण प्रदान नहीं कर सकता, लेकिन इसका सारांश:

  1. मानते हुए कि आपके पास फेसबुक खाते के लिए उपयोगकर्ता नाम/पासवर्ड है, ओथ/प्रमाणीकरण ... पृष्ठ के लिए कर्ल जाएं। "सेट-कुकी" शीर्षलेख में लौटाई गई किसी भी कुकीज को निकालें और फिर किसी भी "स्थान" शीर्षलेख (रास्ते में कुकीज़ संकलित) का पालन करें।
  2. लॉगिन प्रपत्र स्क्रैप, सभी क्षेत्रों के संरक्षण, और उसे सबमिट करें (संदर्भित और सामग्री प्रकार हेडर स्थापित करने, और अपने ईमेल डालने/पास) (1) की आवश्यकता से ही कुकी संग्रह
  3. रूप में एक ही (2), लेकिन अब आपको (2) सबमिट किए जाने के बाद प्राप्त स्वीकृति फॉर्म को पोस्ट करने की आवश्यकता होगी, रेफरर हेडर को थ्रू यूआरएल के साथ सेट करें जहां फॉर्म अधिग्रहित किया गया था।
  4. जब तक यह आप अपनी साइट को वापस भेजता है रिडायरेक्ट का अनुवर्तन और वह URL
  5. एक्सचेंज OAuth endpoint

मुख्य gotchas कुकी हैं पर एक ACCESS_TOKEN के लिए कोड से बाहर "कोड" पैरामीटर प्राप्त प्रबंधन और रीडायरेक्ट। असल में, आपको ब्राउज़र 100% की नकल करना होगा। मुझे लगता है कि यह हैकरी है लेकिन एक रास्ता है, यह वास्तव में बहुत मुश्किल है!

+0

वाह, सिद्धांत में बहुत अच्छा लगता है, क्या आपने ऐसा कुछ किया है जिसमें पाइथन में ऐसा किया गया है? –

15

आसान! बस facebook-sdk का उपयोग करें।

get_app_access_token (APP_ID, app_secret) - वास्तव में क्या आप ;-)

+0

अरे, क्या कोड में app_secret को स्टोर करना सुरक्षित है? फेसबुक प्रलेखन स्पष्ट रूप से बताता है "फिर, सुरक्षा के लिए, ऐप एक्सेस टोकन को क्लाइंट-साइड कोड में कभी भी कड़ी-कोडित नहीं किया जाना चाहिए, ऐसा करने से आपके वेबपृष्ठ को लोड करने वाले प्रत्येक व्यक्ति को आपके ऐप रहस्य में पूर्ण पहुंच मिल जाएगी, और इसलिए आपके ऐप को संशोधित करने की क्षमता। " –

+0

नहीं, आपको क्लाइंट साइड कोड में ऐप राइट शामिल नहीं करना चाहिए। लेकिन यहां सवाल इंटरैक्टिव/सर्वर उपयोग का तात्पर्य है, क्लाइंट-साइड कोड नहीं। – s29

19

यहां आपके द्वारा जाना कर रहे हैं, के रूप में सरल रूप में यह हो सकता है। किसी भी 3 पार्टी एसडीके आदि की आवश्यकता नहीं है

Make sure Python 'requests' module is installed

import requests 

def get_fb_token(app_id, app_secret):   
    payload = {'grant_type': 'client_credentials', 'client_id': app_id, 'client_secret': app_secret} 
    file = requests.post('https://graph.facebook.com/oauth/access_token?', params = payload) 
    #print file.text #to test what the FB api responded with  
    result = file.text.split("=")[1] 
    #print file.text #to test the TOKEN 
    return result 
+0

'result = file.text.split (" = ") [1] इंडेक्स एरर: रेंज ' – User

+1

से बाहर सूची सूची के रूप में, यह एंडपॉइंट जेएसओएन देता है, इसलिए' result = file.text.split (" = ") [1] 'to' result = file.json() ['access_token'] ' –

संबंधित मुद्दे