4

我希望我的应用程序只显示 facebook 页面发布的帖子而无需任何身份验证。这是代码:

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;
    }

}
4

2 回答 2

17

实际上有一种方法可以在未经用户许可的情况下获取页面公共提要!

解决方案

  1. 获取页面 Facebook Profile Id:最简单的方法是查询 Graph API http://graph.facebook.com/ {YourPageUsername} 。例如对于 oStream Android 应用程序https://graph.facebook.com/oStreamApp将返回 Facebook 个人资料 ID 289781571139242

  2. 请求 Facebook 页面提要的 RSS:向https://www.facebook.com/feeds/page.php?format=rss20&id= {yourAppId}发出 http 请求,例如对于 oStream Android 应用程序公共https://www。 facebook.com/feeds/page.php?format=rss20&id=289781571139242

Android实现将是:

  1. 向http://graph.facebook.com/ {YourPageUsername}发出 http 请求
  2. 解析内容并获取 YourPageId
  3. 向https://www.facebook.com/feeds/page.php?format=rss20&id= {yourAppId}发出 http 请求
  4. 解析内容
  5. 根据需要显示内容

旁注 这个问题与Android无关,而与Facebook API有关。

于 2013-03-06T13:43:01.443 回答
5

我已经使用访问令牌完成了它。facebook 开发人员中有一个工具“工具/访问令牌工具”您将获得一个名为“应用程序令牌”的访问令牌,您可以像这样使用它: https ://graph.facebook.com/ “您的 Facebook ID” /feed? access_token= "你的应用令牌" ;

然后,您将获得提要的 json 对象,并且您将能够使用 JSON 解析方法做任何您想做的事情。

在有人更改密码或尝试在 Facebook 上的应用程序管理页面中获取另一个“应用程序秘密 ID”之前,您的应用程序令牌不会移动。享受!

于 2013-06-05T22:34:37.810 回答