公告版位

新版部落格:blog.changyy.org

沒想到要寫寫 Facebook API 啦!我原先以為是 Facebook 會提供一個工作站讓使用者上傳程式碼去運行,結果做這件事的還得自行找一台機器啦,但這樣也比較合情合理,畢竟電腦運算就是要耗 CPU 資源,就是要耗電。

之所以要紀錄這些,目的是給自己一個筆記,雖然官方的教學已經夠清楚,但沒有中文就是不友善啦。

  1. 首先,必須要有一個 Facebook 的帳號,在此就不多講,接著登入後,連結至 Facebook | 開發人員 ,並且點選 [Set Up New Application]
  2. 輸入應用程式的名稱,例如:Example,並且觀看條款後勾選同意。
  3. 系統會為你的應用程式產生獨一無二的資訊,如 Key 等,接著回到[我的應用程式]頁面,並且看到剛剛新增的"Example"資訊,最下方有個項目是[Sample Code],即可點選"example code"可觀看範例程式和簡單安裝的過程
    教學,此範例程式已經是可以運行的程式碼,並且已將應用程式的資訊(Key)也填寫上去了。
  4. 找一台可以用的工作站,必須支援 PHP 程式語言跟 Web Service
  5. 在Web Service 的自己目錄下(Ex:/home/ID/WWW,/home/ID/
    public_html),新增 facebook 相關程式
  6. 新增 index.php 並且加入資訊
    • <?php
      // Copyright 2007 Facebook Corp.  All Rights Reserved.
      //
      // Application: Example
      // File: 'index.php'
      //   This is a sample skeleton for your application.
      //

      require_once
      'facebook.php';

      $appapikey
      = 'your_appapikey';
      $appsecret
      = 'your_appsecret';
      $facebook
      = new Facebook($appapikey, $appsecret);
      $user_id
      = $facebook->require_login();

      // Greet the currently logged-in user!
      echo
      "<p>Hello, <fb:name uid=\"$user_id\" useyou=\"false\" />!</p>";

      // Print out at most 25 of the logged-in user's friends,
      // using the friends.get API method
      echo
      "<p>Friends:";
      $friends
      = $facebook->api_client->friends_get();
      $friends
      = array_slice($friends, 0, 25);
      foreach ($friends as $friend) {
        echo
      "<br>$friend";
      }
      echo
      "</p>";
      ?>
    • 此為官方範例,結果是印出使用者 25 位朋友
  7. 最後的設定
    • 連至 Facebook | 開發人員 並且點選應用程式名稱為 "Example" 的 "編輯設定"
    • 切換至[畫布]頁面,並且至少設定以下資訊
      • 畫布頁面網址
        • http://apps.facebook.com/your_app_name/
        • 這是 Facebook 使用者連到你的應用程式的 link 位置
      • Canvas Callback URL
        • http://Your_Web_Service/facebook_example/
        • 這是你擺放運行程式碼的機器,至少提供 Web Service 跟運行 PHP 的能力
  8. 測試連結,請先登入 Facebook,接著連到 http://apps.facebook.com/your_app_name/ 位置,接著像使用其他程式服務一般,蹦出同意訊息,點選過後,就會呈現出運行結果,此例是列出使用者的名字,並且列出 25 位朋友的 ID

如此一來,就完成使用 Facebook API Example 啦,這支算是簡單的程式,剩下的就是如何善用 Facebook 的社群資訊和力量囉。

相關文章


changyy 發表在 痞客邦 PIXNET 留言(26) 人氣()


留言列表 (26)

發表留言
  • 高藥師
  • 好開心

    找了半天終於有人寫的這麼清楚

    好感動

    謝謝你腰
  • 很高興有幫助到你

    changyy 於 2009/10/25 20:54 回覆

  • 高藥師
  • 請問能夠繼續寫下去嗎??

    我想做一個測驗的api

    請問該怎麼做呢

    謝謝
  • 我在 "Facebook API Example - 客製化 Quiz 測驗教學筆記" 這篇回你好了 :) 這篇只是用來當作初試 Facebook API 啦, 因此越簡單越好, 單純給自己一個筆記而已

    changyy 於 2009/10/25 23:39 回覆

  • bruce2046
  • 請問第5點"在Web Service 的自己目錄下新增 facebook 相關程式"中,應怎樣新增 facebook 相關程式?

    謝謝
  • 第五點下面不是有四道指令, 那就是一個範例的下載與擺放的過程啊

    changyy 於 2010/03/03 18:06 回覆

  • Jerry
  • 想請問版主:

    想請問版主:
    幸福,不是做自己喜歡的事,而是喜歡自己做的事
    這兩句話有何不同?
    小弟才疏學淺還請板主賜教
    小弟不生感激....
  • 這個問題問得太好了!不過跟這篇文章沒有關係,下次可以改用留言板問問題囉~

    在這邊順手回應一下,這個意境就像去「適應環境」而不是「讓環境適應你」囉,這段話我是這樣解釋的,代表嘗試去喜歡自己做的事,而不是專門去挑自己喜歡的事來做囉!如此一來,幸福就在不遠處。

    changyy 於 2010/03/10 00:14 回覆

  • soarb
  • 新人問下。
    我不小心為同一個站添加了,兩個應用程式,居然沒有沖突,不過兩個應用程式名字一樣,工作起來很不方便,想刪除一個,應該如何操作呢?
  • 在瀏覽應用程式的那個頁面時( http://www.facebook.com/developers/apps.php ), 右下角下面有"刪除這個應用程式"可以選擇囉

    changyy 於 2010/03/10 15:20 回覆

  • soarb
  • 太感謝嘍,沒想到回複這麼快。
    這個問題搞定了。

    另外問下,我同樣的js應用代碼,在本地詞服器(loaclhost)與server(申請時網域)上測試,後者可正常運行。
    我試著在在應用程式編輯頁的->進階->伺服器安全清單 中,取消。 在localhost上還是不行。

    博主有辦法嗎?
  • 我的使用經驗就是要在申請的網域才行運作囉, 我沒有在本地端使用的經驗啦

    changyy 於 2010/03/11 01:08 回覆

  • soarb
  • 這段時間耽誤了,沒上來。

    終於找到了#6樓的解決方法。 只需要把本地的server網域綁定好。同時更改本地機上的hosts文件,增加一行server 127.0.0.1,再在本地目錄傳個xd_receiver.htm文件。即可!
  • 哦哦!都忘了還有這種解法,感謝你的分享 :D

    changyy 於 2010/03/17 20:45 回覆

  • 清爽小雨
  • 你寫錯了 應該是要下 tar -zxvf
  • 的確, 你這樣下比較正確, 我的環境只需下 xvf 就會自動解壓縮, 但還是改成你說的好了, 感謝囉!

    changyy 於 2010/03/22 11:47 回覆

  • fish
  • 您好,不好意思,我想請教一下,我照您的步驟做出來-->http://apps.facebook.com/sentytest/,,但解答卻跳不出來,請問我少了什麼程序嗎??謝謝您

  • 有點久沒用了,回想一下好像也有類似的情況。以下就當作參考吧!

    原先我也是用 Javascript 去做頁面 reload 的方式,想說全部寫在 index.php, 然後搭配變數資訊就知道在哪一個階段,但不知為啥,會有你類似的問題,最後我是改用 form 的方式將使用者的資料送出去,並且沒有全部寫在 index.php 了,例如分別寫 index.php, result.php ,一開始在 index.php 上成列問題,最後送到 result.php 去計算結果囉

    但這些已經是四、五個月以前的事了,你可以當作參考就好。也有可能是 Javascript 有問題,等等的,不過已經被 facebook 轉換過了,也不好幫忙囉。再此祝你好運啦!

    changyy 於 2010/03/29 13:50 回覆

  • fish
  • 不好意思,又來叨擾您了,我改了改,結果出現以下的錯誤->Parse error: syntax error, unexpected $end, expecting ')' in /raid/vhost/soho.com.tw/www/blog/www/php/facebookapi_php5_restlib.php on line 2517
    實在是不曉得問題出在那裡,想來請教您,謝謝您
  • 這好像有點難 debug 囧rz, 你先嘗試把整個 code 註解起來, 只留 require( 'facebookapi_php5_restlib.php' ); 看看還有沒有這種訊息, 若沒有的話, 應該是其他部分的程式碼的問題, 有時候 bug 不一定是顯示在上頭所指的地方, 看起來比較像出現在使用相關函式或物件的地方吧, 但如果真的還是出現在 facebookapi_php5_restlib.php, 那大概是不小心改到它了吧 Orz

    changyy 於 2010/04/06 18:34 回覆

  • scott chu
  • 最近點過去都找不到AP

    最近連facevook,發現網頁上沒有地方可以點進去開發人員那個連結。而且我從我的首頁點application可以看到我之前做的一個ap。但是現在點你文章中的那個Facebook | 開發人員 連結,出現要我按一個allow按鈕,按了後顯示的網頁好像是沒看過的develop頁面,然後右上方卻顯示我沒有application,太奇怪了。可知道原因?
  • 我點選 "http://www.facebook.com/developers/" 連過去後, 還是可以看到我曾寫過的程式耶, 看看你會不會用錯帳號了呢?? 最近 Facebook 相關頁面都更新了, 快半年沒去看, 有點不習慣 @_@

    changyy 於 2010/04/29 18:53 回覆

  • scott chu
  • 我附上截圖

    我連你文中的那個連接登入後,出現畫面的右上角是這樣:http://img143.imageshack.us/img143/2083/image1qm.jpg

    然後點Home回去首頁,在點左上的Application連結,出現畫面中間是這樣:http://img443.imageshack.us/img443/8489/image2pb.jpg

    那個我之前做的mytestfb ap在第一張截圖中沒有出現?
  • 唔, 我這邊倒是可以看到, 不過我顯示的是中文"我的程式/查看我的應用程式", 暫時不知該怎樣幫你 Orz

    changyy 於 2010/04/29 22:51 回覆

  • kobe04262002
  • 想請問一下我當初用PHP是用appserv整合套件的
    不知道安裝的路徑在哪裡@@?
    試了一整天 快崩潰了 ORZ
  • 我印象中預設位置在 C:\AppServ 囉, 所以網頁擺放的位置大概是在 C:\AppServ\www 吧

    changyy 於 2010/06/19 16:41 回覆

  • kobe04262002
  • 謝謝你的解答^ ^

    可是放上去你的index.php有一個錯誤欸@@

    Fatal error: Call to undefined method Facebook::require_login() in C:\AppServ\www\fb\facebook-php-sdk-d18f698\index.php on line 6

    這是表是甚麼嗎?
    還是我裝錯了
    謝謝@@
  • 可能是找不到相關的函式庫, 例如沒有把檔案擺好位置, 如 facebook.php, facebookapi_php5_restlib.php 等等

    changyy 於 2010/06/20 15:51 回覆

  • kobe04262002
  • 這是我下載下來的PHP library
    example.php
    facebook.php
    tests.php

    可以請問一下你說的位置是要放在哪裡嗎@@
    我是全部放在appserv的www資料夾中
    還是說要分開放呢
    麻煩你 謝謝
  • 我剛剛從 Facebook 那邊下載回來, 即: facebook-php-sdk-v2.0.4-1-gb570543.tar , 裡頭共有

    facebook-php-sdk-b570543/
    pax_global_header

    進入 facebook-php-sdk-b570543/ 共有
    examples/
    src/
    tests/
    readme.md

    你可以試著多看看 readme.md 和 examples/examples.php, 裡頭已經有很不錯的範例, 你要多多留意 php 語法和檔案最上頭的 require 位置, 如 examples/examples.php 最上頭是 require '../src/facebook.php'; 你大概只是遺漏這個問題, 把路徑調整對了就沒問題囉

    剩下的就交給你自己去摸索囉

    changyy 於 2010/06/20 18:52 回覆

  • kobe04262002
  • OK
    我會再試試看 有問題再請教您
    謝謝你的解答喔~ ^ ^
  • 叮噹可可
  • 那怎麼樣讓facebook的uid去對應到遊戲的暱稱啊!?
    每個遊戲都有一個暱稱,那怎麼讓uid去對應到那個暱稱!?
  • 沒試過不清楚囉, 只是那些暱稱感覺是該遊戲在管控的, 總覺得有存取的權限問題?!

    changyy 於 2010/06/23 17:46 回覆

  • Daniel
  • 想請教在使用FB API時,網站一定要掛在FB下才能執行,還是在自己網內就可以使用這些API的東西呢?
    謝謝
  • 大部分的程式都是掛在 FB 下才能執行, 但你可以使用 Facebook Connect , 使得從你的網站就可以去存取 FB 資料, 但過程中還是要連到 FB 去

    不曉得上述的情境是不是你所謂的網內, 也就是你在你自己架的站上 http://host/my_app/ 上, 使用者可以完全都只在 http://host/my_app/ 上頭做事, 但底層則是透過 Facebook Connect API 去跟 FB 要東西

    changyy 於 2010/07/02 18:03 回覆

  • 餅乾支離破碎
  • 你好 我現在再輸入Canvas callback那邊的網址時
    我打入 http://danny1989522.myftp.org/facebook_example/index.php 像這樣
    我這個是我自己用我的主機當作server 這樣算是工作站嗎?
    可是FB好像不承認我這樣的網址
    它會出現像這樣的訊息
    Validation failed.
    Canvas Callback URL is not a valid URL.
    可以請問該怎麼解決嗎 這種自己申請的網域名稱 FB怎不承認@@?
    謝謝
  • 你申請的 domain name 似乎還沒啟用??
    我在 cmd mode 上執行 nslookup danny1989522.myftp.org 時,並不能找到對應的 IP

    你可以到 http://twbbs.org 申請免費的一組試試

    changyy 於 2010/08/10 07:27 回覆

  • kobe04262002
  • 不好意思又來打擾您
    Fatal error: Call to undefined method Facebook::require_login() in C:\AppServ\www\facebook-php-sdk-71d9a52\index.php on line 14
    上次這個問題還是沒解決
    我依照步驟把您上面說的index放到C:\AppServ\www\facebook-php-sdk-71d9a52 這個路徑下
    也成功放到FB上,可是他顯現的是這個錯誤訊息,不能如同大大說的可以正常輸出25名好友
    我抓的函式庫是如同之前您載的
    facebook-php-sdk-b570543/
    pax_global_header
    進入 facebook-php-sdk-b570543/ 共有
    examples/
    src/
    tests/
    readme.md

    我是全部都放在C:\AppServ\www裡面
    但是就是沒辦法正常WORK... 您的index我只做了以下修改
    require_once './src/facebook.php';

    $appapikey = '451d9a0a6b2fda614e2c9559aa70f210';
    $appsecret = '6169053bd6870dce86f1274af7a26c2a';

    不好意思要一直問您問題
    謝謝
  • 抱歉, 我常常用來測試的機器維修中 orz 少了 public ip 我無法幫你忙

    changyy 於 2010/08/11 13:18 回覆

  • kobe04262002
  • 好@@
    我再繼續摸索看看
    謝謝
  • *佐〃
  • 你好~
    不好意思要請問你一個問題
    請問一下"如何Microsoft Facebook API 3.0在vs.net中呼叫Facebook函數及功能"?

    謝謝
  • 我沒用過 .NET 環境,所以無法幫忙

    changyy 於 2011/03/13 09:02 回覆

  • 悄悄話
  • 悄悄話
  • 悄悄話
  • 悄悄話