2013-02-28 49 views
4

我希望我的應用程序僅顯示未經任何身份驗證的Facebook頁面發佈的帖子。這裏是代碼:無法將Facebook頁面的Feed傳送到我的應用程序

public class Main extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    try { 
    String APP_ID = "1234567890";   
    String APP_SECRET = "1a2b3c4defghijk"; 
    String OWNER_OF_FEED = "somepage"; 

    HttpClient client = new DefaultHttpClient(); 
    HttpGet get = new HttpGet(
      "https://graph.facebook.com/oauth/access_token?client_id="+ 
      APP_ID + 
      "&client_secret="+APP_SECRET+"&grant_type=client_credentials"); 

    ResponseHandler<String> responseHandler = new BasicResponseHandler(); 

    String access_token = client.execute(get, responseHandler); 

    String uri = "https://graph.facebook.com/" + OWNER_OF_FEED + "/feed?" 
      + access_token; 

    get = new HttpGet(uri); 
    String responseBody = client.execute(get, responseHandler); 

    // responseBody contains JSON-encoded feed 

    //textview.setText(responseBody); 
    TextView txtv = (TextView) findViewById(R.id.feed); 
    txtv.setText(String.valueOf(responseBody)); 
    } 

    catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 
} 

但我無法獲得任何內容的應用程序。 我已經在清單文件中包含了互聯網訪問權限。

新代碼:

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     URL url; 
     try { 
      url = new URL("https://www.facebook.com/feeds/page.php?format=rss20&id=289781571139242"); 

      HttpURLConnection urlConnection = (HttpURLConnection) url 
        .openConnection(); 

      InputStream in = urlConnection.getInputStream(); 

      InputStreamReader isw = new InputStreamReader(in); 

      int data = isw.read(); 
      while (data != -1) { 
       char current = (char) data; 
       data = isw.read(); 
       System.out.print(current); 
      } 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

} 

回答

17

實際上有一種方式來獲得一個頁面公共提要未經用戶許可!

解決方案

  1. 獲取頁面的Facebook檔案編號:最簡單的方法是查詢圖形API http://graph.facebook.com/ {} YourPageUsername。 例如對於ostream的Android應用https://graph.facebook.com/oStreamApp將返回Facebook個人資料編號289781571139242

  2. 要求Facebook頁面飼料的RSS: 一個HTTP請求https://www.facebook.com/feeds/page.php?format=rss20&id= {} yourAppId例如對於ostream的Android應用程序的公共https://www.facebook.com/feeds/page.php?format=rss20&id=289781571139242

的Android實現將只是:

  1. 一個HTTP請求http://graph.facebook.com/ {YourPageUsername}
  2. 解析內容,並獲得YourPageId
  3. 發出http請求至https://www.facebook.com/feeds/page.php?format=rss20&id= {yourAppId}
  4. 解析內容
  5. 顯示的內容,如你所願

旁註 這個問題不是很瞭解Android只是與Facebook API。

+0

答覆證實,非常好的一個! – 2013-03-06 20:11:07

+0

非常感謝:) – 2013-03-07 00:48:55

+0

我可以讓你評論這個問題嗎?或者讓其他人認爲通知@K_K? – 2013-03-07 00:57:28

5

我已經使用訪問令牌完成了它。 有一個在Facebook上developpers工具「工具/訪問令牌工具」 你會得到所謂的「應用程序令牌」訪問令牌,您可以使用這樣的: https://graph.facebook.com/「你的Facebook ID」 /飼料的access_token = 「?您的應用令牌「;

然後,您將獲得Feed的json對象,並且您將能夠使用JSON解析方法執行任何您想要的操作。

您的應用令牌不會移動,直到有人更改密碼或嘗試在Facebook的應用管理頁面中獲取另一個「應用祕密標識」。 享受!

相關問題