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プロファイルIDのページを取得します。最も簡単な方法は、Graph APIhttp://graph.facebook.com/{YourPageUsername}をクエリすることですたとえば、oStreamAndroidアプリの場合https://graph.facebook.com/oStreamAppはFacebookプロファイルID289781571139242を返します

  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に関するものではなく、FacebookAPIに関するものです。

于 2013-03-06T13:43:01.443 に答える
5

私はアクセストークンでそれを行いました。Facebook開発者には「ツール/アクセストークンツール」というツールがあります。https ://graph.facebook.com/ 「あなたのFacebookID」 / feed?のように使用できる「アプリトークン」と呼ばれるアクセストークンを取得します 。 access_token= "あなたのアプリトークン" ;

次に、フィードのjsonオブジェクトを取得し、JSON解析メソッドを使用して必要なことを実行できるようになります。

誰かがパスワードを変更するか、Facebookのアプリ管理ページで別の「アプリシークレットID」を取得しようとするまで、アプリトークンは移動しません。楽しみ!

于 2013-06-05T22:34:37.810 に答える