如何使用图形API来获取Facebook的用户相册? [英] How to get Facebook user photo albums using graph api?

查看:221
本文介绍了如何使用图形API来获取Facebook的用户相册?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我如何能够从Facebook获取所有用户的相册。我想这样的与此网址 https://graph.facebook.com/me/albums?access_token=xxxx

How i can fetch all of user Photo albums from facebook. i tried like this with this Url https://graph.facebook.com/me/albums?access_token=xxxx

我用这code,我当时提这个权限,也user_photos

i am using this code, i was mention this permissions also "user_photos".

Bundle parameters = new Bundle();
parameters.putString("format", "json");
parameters.putString("method", "user_photos");
parameters.putString(TOKEN, facebook.getAccessToken());

JSONObject response = null;        
try {

    response = Util.parseJson(Album_Url);        
    JSONArray array = obj.optJSONArray("data");
    for(int i = 0; i<array.length(); i++){                  
    JSONObject main_obj = array.getJSONObject(i);
    String album = main_obj.getString("name");                          
    }        
} catch (JSONException e1) {             
    e1.printStackTrace();
} catch (FacebookError e1) {             
    e1.printStackTrace();
}

但我在日志猫获得这个 09-12 14:27:42.990:W / System.err的(12189):org.json.JSONException:类型的java.lang价值HTTPS。字符串不能转换为JSONObject的

我想这样也

try {

        Bundle parameters = new Bundle();
        parameters.putString("format", "json");
        parameters.putString(TOKEN, facebook.getAccessToken()) ;       
        String response = null;
        try {
            response = Util.openUrl(Album_Url, "GET", parameters);
        } catch (MalformedURLException e) {      
            e.printStackTrace();
        } catch (IOException e) {        
            e.printStackTrace();
        }
        JSONObject obj = Util.parseJson(response);   
        JSONArray array = obj.optJSONArray("data");
        for(int i = 0; i<array.length(); i++){                  
            JSONObject main_obj = array.getJSONObject(i);
            String album =  main_obj.getString("name");                         
        }        
    } catch (JSONException e1) {             
        e1.printStackTrace();
    } catch (FacebookError e1) {             
        e1.printStackTrace();
    }   

我收到此错误 09-12 14:42:36.920:W / System.err的(12259):com.facebook.android.FacebookError:格式不正确的访问令牌

推荐答案

的onCreate()法,我调用这个的AsyncTask

private class getAlbumsData extends AsyncTask<Void, Void, Void> {

    LinearLayout linlaHeaderProgress = (LinearLayout) findViewById(R.id.linlaHeaderProgress);

    @Override
    protected void onPreExecute() {

        // SHOW THE PROGRESS BAR (SPINNER) WHILE LOADING ALBUMS
        linlaHeaderProgress.setVisibility(View.VISIBLE);
    }

    @Override
    protected Void doInBackground(Void... params) {

        // CHANGE THE LOADING MORE STATUS TO PREVENT DUPLICATE CALLS FOR
        // MORE DATA WHILE LOADING A BATCH
        loadingMore = true;

        // SET THE INITIAL URL TO GET THE FIRST LOT OF ALBUMS
        URL = "https://graph.facebook.com/" + initialUserID
                + "/albums&access_token="
                + Utility.mFacebook.getAccessToken() + "?limit=10";

        try {

            HttpClient hc = new DefaultHttpClient();
            HttpGet get = new HttpGet(URL);
            HttpResponse rp = hc.execute(get);

            if (rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                String queryAlbums = EntityUtils.toString(rp.getEntity());

                JSONObject JOTemp = new JSONObject(queryAlbums);

                JSONArray JAAlbums = JOTemp.getJSONArray("data");

                if (JAAlbums.length() == 0) {
                    stopLoadingData = true;
                    Runnable run = new Runnable() {

                        @Override
                        public void run() {
                            Toast.makeText(getApplicationContext(),
                                    "No more Albums", Toast.LENGTH_SHORT)
                                    .show();
                        }
                    };
                    Albums.this.runOnUiThread(run);

                } else {
                    // PAGING JSONOBJECT
                    if (JOTemp.has("paging"))   {
                        JSONObject JOPaging = JOTemp.getJSONObject("paging");

                        if (JOPaging.has("next")) {
                            String initialpagingURL = JOPaging
                                    .getString("next");

                            String[] parts = initialpagingURL.split("limit=10");
                            String getLimit = parts[1];

                            pagingURL = "https://graph.facebook.com/"
                                    + initialUserID + "/albums&access_token="
                                    + Utility.mFacebook.getAccessToken()
                                    + "?limit=10" + getLimit;

                        } else {
                            stopLoadingData = true;
                            Runnable run = new Runnable() {

                                @Override
                                public void run() {
                                    Toast.makeText(getApplicationContext(),
                                            "No more Albums",
                                            Toast.LENGTH_SHORT).show();
                                }
                            };
                            Albums.this.runOnUiThread(run);
                        }
                    } else {
                        stopLoadingData = true;
                        Runnable run = new Runnable() {

                            @Override
                            public void run() {
                                Toast.makeText(getApplicationContext(),
                                        "No more Albums",
                                        Toast.LENGTH_SHORT).show();
                            }
                        };
                        Albums.this.runOnUiThread(run);

                    }

                    getAlbums albums;

                    for (int i = 0; i < JAAlbums.length(); i++) {
                        JSONObject JOAlbums = JAAlbums.getJSONObject(i);

                        if (JOAlbums.has("link")) {

                            albums = new getAlbums();

                            // GET THE ALBUM ID
                            if (JOAlbums.has("id")) {
                                albums.setAlbumID(JOAlbums.getString("id"));
                            } else {
                                albums.setAlbumID(null);
                            }

                            // GET THE ALBUM NAME
                            if (JOAlbums.has("name")) {
                                albums.setAlbumName(JOAlbums
                                        .getString("name"));
                            } else {
                                albums.setAlbumName(null);
                            }

                            // GET THE ALBUM COVER PHOTO
                            if (JOAlbums.has("cover_photo")) {
                                albums.setAlbumCover("https://graph.facebook.com/"
                                        + JOAlbums.getString("cover_photo")
                                        + "/picture?type=normal"
                                        + "&access_token="
                                        + Utility.mFacebook
                                                .getAccessToken());
                            } else {
                                albums.setAlbumCover("https://graph.facebook.com/"
                                        + JOAlbums.getString("id")
                                        + "/picture?type=album"
                                        + "&access_token="
                                        + Utility.mFacebook
                                                .getAccessToken());
                            }

                            // GET THE ALBUM'S PHOTO COUNT
                            if (JOAlbums.has("count")) {
                                albums.setAlbumPhotoCount(JOAlbums
                                        .getString("count"));
                            } else {
                                albums.setAlbumPhotoCount("0");
                            }

                            arrAlbums.add(albums);
                        }
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }

    @Override
    protected void onPostExecute(Void result) {

        // SET THE ADAPTER TO THE LISTVIEW
        lv.setAdapter(adapter);

        // CHANGE THE LOADING MORE STATUS
        loadingMore = false;

        // HIDE THE PROGRESS BAR (SPINNER) AFTER LOADING ALBUMS
        linlaHeaderProgress.setVisibility(View.GONE);
    }

}

为了完整起见,这里是我用来获取寻呼网址一个永不落幕的清单:

For the sake of completeness, here is what I use to fetch the Paging URLS for a never ending list:

private class loadMoreAlbums extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onPreExecute() {
        // SHOW THE BOTTOM PROGRESS BAR (SPINNER) WHILE LOADING MORE ALBUMS
        linlaProgressBar.setVisibility(View.VISIBLE);
    }

    @Override
    protected Void doInBackground(Void... params) {

        // SET LOADING MORE "TRUE"
        loadingMore = true;

        // INCREMENT CURRENT PAGE
        current_page += 1;

        // Next page request
        URL = pagingURL;
        // Log.e("NEW URL", URL);

        try {

            HttpClient hc = new DefaultHttpClient();
            HttpGet get = new HttpGet(URL);
            HttpResponse rp = hc.execute(get);

            if (rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                String queryAlbums = EntityUtils.toString(rp.getEntity());
                // Log.e("RESULT", queryAlbums);

                JSONObject JOTemp = new JSONObject(queryAlbums);

                JSONArray JAAlbums = JOTemp.getJSONArray("data");

                if (JAAlbums.length() == 0) {
                    stopLoadingData = true;

                    Runnable run = new Runnable() {

                        @Override
                        public void run() {
                            Toast.makeText(getApplicationContext(),
                                    "No more Albums", Toast.LENGTH_SHORT)
                                    .show();
                        }
                    };
                    Albums.this.runOnUiThread(run);

                } else {
                    // PAGING JSONOBJECT
                    JSONObject JOPaging = JOTemp.getJSONObject("paging");
                    // Log.e("PAGING", JOPaging.toString());

                    if (JOPaging.has("next")) {
                        String initialpagingURL = JOPaging
                                .getString("next");
                        // Log.e("initialpagingURL", initialpagingURL);

                        String[] parts = initialpagingURL.split("limit=10");
                        String getLimit = parts[1];

                        pagingURL = "https://graph.facebook.com/"
                                + initialUserID + "/albums&access_token="
                                + Utility.mFacebook.getAccessToken()
                                + "?limit=10" + getLimit;
                        // Log.e("NEW PAGING URL", pagingURL);

                    } else {
                        stopLoadingData = true;
                        Runnable run = new Runnable() {

                            @Override
                            public void run() {
                                Toast.makeText(getApplicationContext(),
                                        "No more Albums available",
                                        Toast.LENGTH_SHORT).show();
                            }
                        };
                        Albums.this.runOnUiThread(run);
                    }

                    getAlbums albums;

                    for (int i = 0; i < JAAlbums.length(); i++) {
                        JSONObject JOAlbums = JAAlbums.getJSONObject(i);
                        // Log.e("INDIVIDUAL ALBUMS", JOAlbums.toString());

                        if (JOAlbums.has("link")) {

                            albums = new getAlbums();

                            // GET THE ALBUM ID
                            if (JOAlbums.has("id")) {
                                albums.setAlbumID(JOAlbums.getString("id"));
                            } else {
                                albums.setAlbumID(null);
                            }

                            // GET THE ALBUM NAME
                            if (JOAlbums.has("name")) {
                                albums.setAlbumName(JOAlbums
                                        .getString("name"));
                            } else {
                                albums.setAlbumName(null);
                            }

                            // GET THE ALBUM COVER PHOTO
                            if (JOAlbums.has("cover_photo")) {
                                albums.setAlbumCover("https://graph.facebook.com/"
                                        + JOAlbums.getString("cover_photo")
                                        + "/picture?type=album"
                                        + "&access_token="
                                        + Utility.mFacebook
                                                .getAccessToken());
                            } else {
                                albums.setAlbumCover("https://graph.facebook.com/"
                                        + JOAlbums.getString("id")
                                        + "/picture?type=album"
                                        + "&access_token="
                                        + Utility.mFacebook
                                                .getAccessToken());
                            }

                            // GET THE ALBUM'S PHOTO COUNT
                            if (JOAlbums.has("count")) {
                                albums.setAlbumPhotoCount(JOAlbums
                                        .getString("count"));
                            } else {
                                albums.setAlbumPhotoCount("0");
                            }

                            arrAlbums.add(albums);
                        }
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }

    @Override
    protected void onPostExecute(Void result) {

        // get listview current position - used to maintain scroll position
        int currentPosition = lv.getFirstVisiblePosition();

        // APPEND NEW DATA TO THE ARRAYLIST AND SET THE ADAPTER TO THE
        // LISTVIEW
        adapter = new AlbumsAdapter(Albums.this, arrAlbums);
        lv.setAdapter(adapter);

        // Setting new scroll position
        lv.setSelectionFromTop(currentPosition + 1, 0);

        // SET LOADINGMORE "FALSE" AFTER ADDING NEW FEEDS TO THE EXISTING
        // LIST
        loadingMore = false;

        // HIDE THE BOTTOM PROGRESS BAR (SPINNER) AFTER LOADING MORE ALBUMS
        linlaProgressBar.setVisibility(View.GONE);
    }

}

loadMoreAlbums 的AsyncTask 从运行 onScrollListener 设置在的onCreate()

    lv.setOnScrollListener(new OnScrollListener() {

        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {

        }

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem,
                int visibleItemCount, int totalItemCount) {
            int lastInScreen = firstVisibleItem + visibleItemCount;
            if ((lastInScreen == totalItemCount) && !(loadingMore)) {

                if (stopLoadingData == false) {
                    // FETCH THE NEXT BATCH OF FEEDS
                    new loadMoreAlbums().execute();
                }

            }
        }
    });

您可以从我的code选择相关的部分,或者你可以在它的整个使用它(灌浆进程的几个空格之后)。希望一些这方面的帮助。

You can choose the relevant parts from my code, or you can use it in it's entirety (after filling a few blanks of course). Hope some of this helps.

这篇关于如何使用图形API来获取Facebook的用户相册?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆