2012-05-22 52 views
1

我開發了一個ASP.NET網站。它將包含文本文章,其中一些將包含我的Facebook帳戶上方和超出文本的圖片。請注意,我只會使用我帳戶中的公開相冊。Facebook SDK - 通過身份驗證訪問公共相冊,無需身份驗證

所以我創建了一個SQL表和綁定的articles,該albumsphotos(所有的人都在事實上IDs)。我已經使用facebook api sdk這是一個偉大的圖書館。

顯然,我的網站的任何訪問者(即使他沒有一個Facebook帳戶)mignt能夠通過Facebook oAuth看到的文章和圖片 withount訪問Facebook和沒有認證訪問它們。

那麼這裏的問題:

1)我如何獲得一個公開相冊包含照片通過album iduser id無需驗證? (我不知道,也許我應該使用除專輯ID和用戶ID之外的其他參數)

2)如何獲取公開相冊的屬性(名稱,ID等)?

回答

2

沒有訪問令牌,您可以從圖表api中獲得很少的內容。 只需將您的瀏覽器指向:http://graph.facebook.com/YOU_USER_ID

您還可以檢查User object documentation,它說,在權限柱(3)「不需要的access_token」你可以取出一塊令牌獲得域/連接表。

如果你想要讓自己的其他數據,並公開服務在你的網站,你有兩種選擇:

  1. 使用server-side authentication flow,獲得長壽命的訪問令牌(60天),保存和在接下來的60天內使用它來從Facebook獲取您的數據。 然後,當它過期時再次通過驗證過程。 只有你需要經歷它而不是你的用戶,並且每60天只有一次。

  2. 自己登錄,根據您的應用程序進行身份驗證,獲取所有數據並將其保存在數據庫中,然後將其呈現給用戶。 您需要每隔一段時間更新一次。


編輯

服務器側認證流動引導件具有寫入在PHP的例子。 這是一個簡單的例子,並沒有涵蓋所有的場景,但這是一個很好的開始。

我在Python和Java實現這一點,但因爲它涵蓋了多個請求,並指出這不是一件很容易被共享的,所以我只是描述我認爲你應該使用流程:

  1. 裏面Facebook你去你的畫布應用
  2. Facebook將進行POST到iframe與你的畫布網址
  3. 在後的數據,你會得到一個signed request,對其進行解碼,並檢查它是否有一個訪問令牌,如果所以檢查它何時到期。如果一切順利,保存該令牌並且驗證過程結束,否則:
  4. 將用戶重定向到oAuth dialog以及您需要的重定向url和權限。
  5. 當你允許你自己的應用程序後,你將被重定向到代碼參數(在查詢字符串中)的「recirect_uri」。
  6. 將訪問令牌的代碼與Facebook服務器交換並保存令牌。
  7. 然後,您可以將自己重定向到畫布應用程序或停在那裏。

這應該做一個長壽命的訪問令牌,然後您可以使用60天。

至於把你的fb數據保存在你自己的數據庫中,把數據保存在數據庫中是一個非常簡單的操作,這一切都取決於你想要保存的數據,你需要如何編碼/使用它(json, XML,純文本)。

例如,假設您想要顯示自己的照片,那麼在獲取令牌後(如上所述),只需通過向您的服務器查詢您的照片,即可發出http請求至:https://graph.facebook.com/me/photos?access_token=XXXXXX。 你應該得到一個json編碼的結果,遍歷它並將每張圖片保存爲你的db上的一條記錄。

+0

你有一個例子如何在asp.net中做到這一點? – Alexandre

+0

我根本不使用.net,但你指的是哪一部分?服務器端認證還是數據的持久性? –

+0

兩者。所以你可以用你使用的語言舉個例子。沒關係。 – Alexandre

1

檢索用戶的相冊列表中,您需要發出下一個GET請求圖形API:

https://graph.facebook.com/me/albums?access_token=... 

,並檢索照片列表:

https://graph.facebook.com/ALBUM_ID?access_token=... 

但是你不能讀取用戶的相冊(和照片)沒有身份驗證,並要求user_photos權限。

根據album文檔:

要讀取的相冊,你需要

  • 任何有效的訪問令牌,如果它是公共的,屬於Page
  • user_photos許可,如果它屬於a User
  • friend_photos權限如果它屬於User's朋友

所以通常你只有兩個選擇,以達到你想要的結果:

  1. 使用Facebook頁面來存儲所有要顯示在現場Albums/Photos
  2. 使用您的個人帳戶儲存Albums/Photos
+0

我想我要使用Facebook頁面來存儲相冊。你能告訴我如何通過它的ID獲得一張專輯(只有一張)?和一個照片(也只有一個)通過它的ID? – Alexandre

+0

還有一件事。要閱讀屬於我的相冊(作爲用戶),我必須進行身份驗證,但是我應該怎麼做才能避免訪問者必須通過身份驗證才能看到相冊和照片? – Alexandre

+1

@Alex,你可以通過'id'訪問每個對象(Album/Photo/User/Page/etc),只需使用'https:// graph.facebook.com/OBJECT_ID',這將返回與該對象相關的數據閱讀Graph API文檔,瞭解更多關於不同對象的數據信息)。 –