ใครชำนาญการใช้ opengraphAPI ของ facebook ขอความช่วยเหลือด้วยครับ

เริ่มโดย anonymous, 18 พฤศจิกายน 2011, 19:57:02

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

anonymous

การทำความเข้าใจ opengraphAPI  ค่อนข้างยาก แล้วเจอภาษาอีก มึน ๆๆ
เอาง่ายๆ ลองเข้าไปดู ของคนไทยอธิบายไว้ ก่อน เพื่อความเร็ว มีตัวอย่างใช้งานได้จริง ดีมากๆเลย
http://www.ninenik.com/content.php?arti_id=353

bonshington

เท่าที่ดู code น่าจะติด 3 อันนี้หล่ะ
1 ต้องเป็น app
2 user ต้องกดอนุญาติ ตย เช่น เวลาเราเพิ่ม app บน fb เราต้องกดตกลง
3 ต้อง implement oauth เพื่อให้ได้ access_token มา

จุดหลักในการทำ fb app มี 2ข้อยากๆ
1 oauth เป็นระบบ login dialog ของ fb ที่จะแสดงให้ผู้ใช้งานกดตกลง
2 การรับข้อมูลหลังการ login

การ implement oauth ถ้าไม่ใช้ Facebook php sdk พูดได้เลยว่า เสียเวลาหมาๆ เอ๊ย มากๆ ยาก+เยอะ
คุ้นๆว่า ถ้าเป็ฯ app + web login ไม่ต้อง oauth ก็ได้ แค่ยิง app_id ไป ที่หน้า social login แล้ว fb จะยิงกลับมาเอง

ส่วนในเคสนี้ ขั้นตอนการทำจนได้ accesstoken อธิบายคร่าวๆตามนี้
1 ไปสมัครเป็น app
2 ไปตั้ง app setting ให้มัน redirect มาหน้าเวปเรา(หน้าเวป หรือหน้า app canvas)
3 เมื่อต้องการให้ user login ก็ redirect  user ไป login dialog ของ fb
4 จากนั้น  fb จะยิง req ด้วยการ post กลับมาที่เวปเรา
5 query string มี 2 ส่วน คือ signed_request กับ encoded_sig
6 ถอดรหัสตามด้านล่าง
7 นำ app secret ที่ได้ตอนลงทะเบียน fb app มาเพื่อถอดรหัส encoded_sig (รหัสที่ได้มาพร้อม app id)
8 ถ้า encoded sig แล้วตรงกัน data ที่มันโพสมาอีกตัว แสดงว่า ข้อมูลที่ได้ ถูกต้อง
9 ใน json ที่ได้ จะมี field ชื่อ access_token ก็เอาอันนั้นแหละ มายิง req

แถม code ถอดรหัส fb request เป็น python + django เอาของในเน็ตมาแล้ว เขียนแก้เองใหม่
เวลาใช้ก็

def test(self): return "f0i1KiAELqTuJtJ31jf62JkRZEGq3W35Lg.eyJhbG0aG0iOiJITU ยาวมากๆ"

fb = facebook(self.test())
fb.data คือข้อมูล user ในรูป json แต่ใน python เป็น dict ทั่วไปก็มี uid, access_token

** สังเกตุว่า  ตัว string ที่ fb มันโพสมา จะมีจุด คั่นกลาง ถ้า split แล้ว
- ครึ่งแรก จะเรียกว่า payload เอามาถอด base64 ตามด้วยถอด hmac ด้วย app secret จะได้ string ค่านึง เพื่อตรวจสอบความถูกต้อง
- ครึ่งหลัง เป็น base64 encode ธรรมดา เมื่อถอดออก จะได้ json และถ้าเอาข้อมูลก่อนถอด ไปเข้ารหัส hmac จะต้องตรงกับ payload
ลองอ่านจาก code ละกันคับ อธิบายเอง งงเอง
class facebook(object):
   
    def app_secret(self): return "c2103xxxxxac9861a"
   
    def __init__(self, signed_request):
        self.data = self.parse_signed_request(signed_request)
   
    def decode_signed_request(self, inp):
        padding_factor = (4 - len(inp) % 4) % 4
        inp += "="*padding_factor
        return base64.b64decode(unicode(inp).translate(dict(zip(map(ord, u'-_'), u'+/'))))

    def parse_signed_request(self, signed_request):

        l= signed_request.split('.', 2)
        encoded_sig = l[0]
        payload = l[1]

        sig = self.decode_signed_request(encoded_sig)
        data = simplejson.loads(self.decode_signed_request(payload))

       if data.get('algorithm').upper() != 'HMAC-SHA256':
            log.error('Unknown algorithm')
            return None
        else:
            expected_sig = hmac.new(self.app_secret(), msg=payload, digestmod=hashlib.sha256).digest()

        if sig != expected_sig:
            return None
        else:
            log.debug('valid signed request received..')
            return data

ขอเม้าขำๆ แก้เบื่อ ที่มาของ app python ที่ผมเขียน (เป็น fb app ตัวที่สาม) คือ
ช่วงหลังๆ เห็นมีคนนิยมขายของกันใน fb เยอะ และทุกคนบ่นเหมือนกันหมด ว่า จะทำไงให้ shop สวย
ผมเลยเกิดไอเดียว่า น่าจะทำเป็น app tab  ที่ ผู้ขาย สามารถเข้าไปเพิ่มลด สินค้า แก้ไขข้อมูลได้ง่าย และเปลี่ยน themeได้เอง ส่วนผู้ซื้อ ก็แค่เปิด fb page ขึ้นมาก็จบ

ประเด็นคือ ไม่อยากลงทุน เลยหา host free แต่ fb บังคับว่า app ต้องเป็น https จนในที่สุด มาเจอ google app engine ที่ให้บริการฟรี ประเด็นคือมันบังคับให้ 3 ภาษา คือ java + jsp, python, GO
java นั้น เยอะเกินไป คือcode เยอะเกิน ไม่เหมาะกับ app นี้ ตั้งใจว่า อยากทำเป็น code หลังบ้านไม่เยอะ เน้นเป็ฯ json ที่เหลือเป็น javascript จะทำง่ายกว่า เร็วกว่า สวยกว่า มานั่งใช้ jsp
ส่วนภาษา GO ก็ไม่น่าเสี่ยง เพราะพึ่งเกิดใหม่ และมีแต่ google ที่ใช้ เลยไม่รู้จะเขียนไปทำไม
สุดท้าย เลยมาลงที่ python พอได้อ่าน พบว่ามันง่ายมาาาก โครงสสร้างภาษาเป็น mvc แต่กำเนิด syntac อ่านง่ายมากๆ มี แถม lamda function แค่นี้ก็ดีกว่า  java มากโขแล้ว
เริ่มเขียนขำๆได้ วันสองวัน พอเอาขึ้น server แม่มดันมี error กับ python 2.7 ตอนนี้เลยกะว่า หลังปีใหม่ค่อยมา port ลง 2.5 และทำต่อ

jim_no1

ยังคงรอคำแนะนำอยู่นะครับ
เพราะว่่าไม่รู้วิธีจริง ๆ
สงสัยคงเป็นเพราะผมโง่เกินไปหรือป่าว เลยไม่เข้าใจน่ะ
[direct=http://www.jimbeautify.com]jimbeautify.com ป้ายทะเบียนยาว[/direct]
[direct=http://jimbeautify.com/design/Plate_car/home_car.php]jimbeautify ออกแบบรถอย่างง่าย ๆ ด้วยตนเอง[/direct]
[direct=http://www.jimbeautify.com/forum/index.php] ประกาศขายสินค้าต่าง ๆ[/direct]
[direct=http://www.jimbeautify.com/forum/index.php?topic=15.0]คลิีกดูรายละเอียดเข้าร่วมฝึกอบรมทำป้ายทะเบียนกันน้ำแบบมืออาชีพ
[/direct]

bonshington

อ้างถึงจาก: jim_no1 ใน 22 พฤศจิกายน 2011, 16:43:25
ยังคงรอคำแนะนำอยู่นะครับ
เพราะว่่าไม่รู้วิธีจริง ๆ
สงสัยคงเป็นเพราะผมโง่เกินไปหรือป่าว เลยไม่เข้าใจน่ะ
ไม่เข้าใจตรงไหน? อยากรู้อะไร? และทำอะไรบ้างแล้วอ่ะคับ?

jim_no1

อ้างถึงจาก: bonshington ใน 22 พฤศจิกายน 2011, 17:25:59
อ้างถึงจาก: jim_no1 ใน 22 พฤศจิกายน 2011, 16:43:25
ยังคงรอคำแนะนำอยู่นะครับ
เพราะว่่าไม่รู้วิธีจริง ๆ
สงสัยคงเป็นเพราะผมโง่เกินไปหรือป่าว เลยไม่เข้าใจน่ะ
ไม่เข้าใจตรงไหน? อยากรู้อะไร? และทำอะไรบ้างแล้วอ่ะคับ?
คืออย่างนี้ครับ
เนื่องจากว่า ผมได้ทำหน้าที่ให้ผู้เข้ามาใช้บริการเค้าได้ทำการ Upload รูปเข้าสู่ระบบ เพื่อเป็นบริการอย่างหนึ่งของเวปผมน่ะ
คลาวนี้ เมื่อได้เข้ามาอ่านในหัวข้อนี้เลยเกิดไอเดียว่า หากเราเอาลูกเล่นนี้มาใช้ในเวปของเราน่าจะดีขึ้น

สิ่งที่ต่องการนั้นก็คือ ผมได้ทำหน้า upload เป็นที่เรียบร้อยแ้ล้ว และหน้าที่จะเอาออกมาโชว์ด้วย เหมือนกัน เรียบร้อยแล้ว
แต่ว่าคลาวนี้หากผมสามารถกำหนดให้ เมื่อมีผู้ที่เข้ามา upload รูปเสร็จแล้วนั้น รูปนั้นก็จะเข้ามาโชว์อยู่ที่ webboard ด้วยน่ะครับ
จะให้โชว์ออกมาที่หมวดนึง ที่ผมไดสร้างไว้ที่ smf น่ะครับ

ไม่ทราบว่าต่องทำยังไง เพราะว่าเรื่องโค๊ตนั้น ผมไม่เป็นเลยจริง ๆ แถมไม่รู้เรื่องลูกเล่นต่าง ๆ ด้วย
[direct=http://www.jimbeautify.com]jimbeautify.com ป้ายทะเบียนยาว[/direct]
[direct=http://jimbeautify.com/design/Plate_car/home_car.php]jimbeautify ออกแบบรถอย่างง่าย ๆ ด้วยตนเอง[/direct]
[direct=http://www.jimbeautify.com/forum/index.php] ประกาศขายสินค้าต่าง ๆ[/direct]
[direct=http://www.jimbeautify.com/forum/index.php?topic=15.0]คลิีกดูรายละเอียดเข้าร่วมฝึกอบรมทำป้ายทะเบียนกันน้ำแบบมืออาชีพ
[/direct]

bonshington

โอว ถ้า coding ไม่ถนัดนี่คงยากอ่ะคับ เพราะการจะยัดรูปลง fb ได้ เรื่องเยอะอยู่

jim_no1

อ้างถึงจาก: bonshington ใน 22 พฤศจิกายน 2011, 19:17:27
โอว ถ้า coding ไม่ถนัดนี่คงยากอ่ะคับ เพราะการจะยัดรูปลง fb ได้ เรื่องเยอะอยู่
ดูท่าจะยากจริง ๆ ซะแล้วดิเนี่ย
แต่ก็ต่องพยายามต่อไป
[direct=http://www.jimbeautify.com]jimbeautify.com ป้ายทะเบียนยาว[/direct]
[direct=http://jimbeautify.com/design/Plate_car/home_car.php]jimbeautify ออกแบบรถอย่างง่าย ๆ ด้วยตนเอง[/direct]
[direct=http://www.jimbeautify.com/forum/index.php] ประกาศขายสินค้าต่าง ๆ[/direct]
[direct=http://www.jimbeautify.com/forum/index.php?topic=15.0]คลิีกดูรายละเอียดเข้าร่วมฝึกอบรมทำป้ายทะเบียนกันน้ำแบบมืออาชีพ
[/direct]

kokarat

เอาตรงๆ นะผมอ่านแล้ว ผม งง คำถาม  :wanwan017:  แบบนี้หรือเปล่า

// Upload a photo to a user's profile
// Your app needs photo_upload permission for this to work
$facebook->setFileUploadSupport(true);

$img = '/tmp/mypic.png';

$photo = $facebook->api('/me/photos', 'POST',
                        array( 'source' => '@' . $img,
                               'message' => 'Photo uploaded via the PHP SDK!'
                       ));

thaiterbor

เตือนใจตัวเอง "คนอื่นทำได้ เราก็ต้องทำได้"
ผมคือ "Graphic Design" รับงานออกแบบ
[direct=http://www.gamingshopping.tk/]จำหน่ายของเล่นและเกมส์ฝึกทักษะ[/direct]
[direct=http://www.petsuppliessupersales.ga/]จำหน่ายอุปกรณ์สำหรับสัตว์เลี้ยง[/direct]

bonshington