Programing

그래프 API에서 "실제"Facebook 프로필 사진 URL 가져 오기

crosscheck 2020. 10. 19. 07:43
반응형

그래프 API에서 "실제"Facebook 프로필 사진 URL 가져 오기


Facebook 그래프 API는 다음을 사용하여 사용자의 프로필 사진을 얻을 수 있다고 알려줍니다.

http://graph.facebook.com/517267866/picture?type=large

잘 작동합니다. 그러나 브라우저에 위의 URL을 입력하면 이미지의 실제 주소는

http://profile.ak.fbcdn.net/profile-ak-snc1/v227/560/83/n517267866_1928.jpg

프로그래밍 방식으로 첫 번째 URL을 사용하여 두 번째 URL을 얻으려면 어떻게해야합니까?


첫 번째 URL은 두 번째 URL에 HTTP 302 (임시 리디렉션)를 제공합니다. 따라서 프로그래밍 방식으로 두 번째 URL을 찾으려면 첫 번째 URL에 대한 HTTP 요청을 발행 Location하고 응답 헤더를 가져올 수 있습니다.

즉, 두 번째 URL이 영구적 인 것에 의존하지 마십시오. HTTP 응답 코드 (영구 301이 아닌 302)를 조금 읽어 보면 Facebook이 정기적으로 URL을 변경하여 사람들이 서버를 사용하여 이미지를 호스팅하는 것을 방지 할 수 있습니다.


편집 : OP가 게시 한 CDN URL은 이제 404이므로 URL이 오래 지속되는 것에 의존 할 수 없음을 알고 있습니다. 또한 <img>SSL 보안 페이지 에서 Graph API에 연결하는 경우 추가해야하는 매개 변수 있습니다 .https://graph.facebook.com


업데이트 : API가 매개 변수추가했습니다redirect=false– 리디렉션이 아닌 JSON이 반환되도록합니다. 되 돌린 JSON에는 CDN URL이 포함됩니다.

{
   "data": {
      "url": "http://profile.ak.fbcdn.net/...",
      "is_silhouette": false
   }
}

다시 말하지만,이 CDN URL이 오래 지속되는 것에 의존하지 않을 것입니다. JSON 응답은 허용 CORS 헤더와 함께 전송되므로 XHR 요청으로이 클라이언트 측을 자유롭게 수행 할 수 있습니다.


http://graph.facebook.com/517267866/?fields=picture&type=large

JSON으로 URL을 반환합니다.


늦었지만 프로필 이미지의 URL을 얻는 다른 방법이 있습니다.

원래 URL에 매개 변수 redirect=false추가하여 일반적으로 리디렉션되는 이미지의 실제 URL을 얻을 수 있습니다 .

따라서 새 요청은 http://graph.facebook.com/517267866/picture?type=large&redirect=false 와 같습니다 . 그러면 사진의 URL과 부울 is_silhouette가 포함 된 JSON 개체가 반환됩니다 (사진이 기본 Facebook 사진이면 true).

사진도 지정한 크기가됩니다. 치수를 추가하여 추가로 테스트 할 수 있습니다. http://graph.facebook.com/517267866/picture?type=large&redirect=false&width=400&height=400


iOS에서 프로필 사진을 얻으려는 다른 사람 :

사용자의 Facebook 사진을 얻기 위해 이렇게했습니다.

NSString *profilePicURL = [NSString stringWithFormat:@"http://graph.facebook.com/%@/picture?type=large", fbUserID];

여기서 'fbUserID'는 Facebook 사용자의 프로필 ID입니다.

이런 식으로 항상 profilePicURL의 URL을 호출하여 이미지를 가져올 수 있으며 항상 가져옵니다. 이미 사용자 ID가있는 경우 API 요청이 필요하지 않습니다. facebook.com/ 뒤에있는 URL에 ID를 붙이기 만하면됩니다.

iOS에서 fbUserID를 필요로하는 사람에게 FYI :

if (FBSession.activeSession.isOpen) {
    [[FBRequest requestForMe] startWithCompletionHandler:
     ^(FBRequestConnection *connection,
       NSDictionary<FBGraphUser> *user,
       NSError *error) {
         if (!error) {
             self.userName = user.name;
             self.fbUserID = user.id;
         }
     }];
}

작동하려면 활성 FBSession이 필요합니다 (Facebook의 문서 및 "Scrumptious"예제 참조).


URL이있는 좋은 품질의 프로필 사진의 JSON을 원한다면 다음을 사용할 수 있습니다.

http://graph.facebook.com/517267866/picture?height=1024&redirect=false

그림이 필요한 경우 매개 변수 리디렉션없이 사용하십시오.

http://graph.facebook.com/517267866/picture?height=1024

517267866 은 위 예 중 하나의 프로필 ID입니다. 필요한 페이스 북 아이디를 입력하세요

도움이 되길 바랍니다


$url = 'http://graph.facebook.com/100000771470028/picture?type=large';
$rray=get_headers($url);
$hd = $rray[4];
echo(substr($hd,strpos($hd,'http')));

그러면 요청한 URL이 반환되며 원래 URL에서 동적으로 URL을 호출하기 때문에 facebook에서 URL을 변경하는 문제는 중요하지 않습니다.


이것은 실제로 작동하는 유일한 것입니다.

me?fields=picture.type(*YOURTYPE*)

여기서 YOURTYPE 은 small, normal, album, large, square 중 하나 일 수 있습니다.


Android의 경우 :

최신 Facebook SDK에 따르면

먼저 당신은 또한 제공 GraphRequest API하는 사용자의 모든 세부 사항을 얻기 위해 전화해야 API합니다 URL of current Profile Picture.

Bundle params = new Bundle();
params.putString("fields", "id,email,gender,cover,picture.type(large)");
new GraphRequest(token, "me", params, HttpMethod.GET,
        new GraphRequest.Callback() {
            @Override
            public void onCompleted(GraphResponse response) {
                if (response != null) {
                    try {
                        JSONObject data = response.getJSONObject();
                        if (data.has("picture")) {
                            String profilePicUrl = data.getJSONObject("picture").getJSONObject("data").getString("url");
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
}).executeAsync();

function getFacebookImageFromURL($url)
{
  $headers = get_headers($url, 1);
  if (isset($headers['Location']))
  {
    return $headers['Location'];
  }
}

$url = 'https://graph.facebook.com/zuck/picture?type=large';
$imageURL = getFacebookImageFromURL($url);

이제 Facebook에는 SSL이 필요합니다.

-> 중요 추가 S, https-> https://graph.facebook.com/userId/?fields=picture&type=large

2014 년 6 월 작품


Hmm..i는 사용자 이미지에 대한 URL을 얻기 위해 모든 것을 시도했습니다. 완벽한 솔루션은 다음과 같은 fql 사용이었습니다.

    $fql_b = 'SELECT pic from user where uid = ' . $user_id;
    $ret_obj_b = $facebook->api(array(
                               'method' => 'fql.query',
                               'query' => $fql_b,
                             ));


             $dp_url =$ret_obj_b[0]['pic'];

다른 원하는 결과를 얻으려면 pic을 big, pic_square로 바꾸십시오. 도움이 되었기를 바랍니다 ....


ImageView user_picture;
userpicture=(ImageView)findViewById(R.id.userpicture);
URL img_value = null;
img_value = new URL("http://graph.facebook.com/"+id+"/picture?type=large");
Bitmap mIcon1 = BitmapFactory.decodeStream(img_value.openConnection().getInputStream());
userpicture.setImageBitmap(mIcon1);

여기서 ID는 프로필 ID 중 하나 입니다.

참고 URL : https://stackoverflow.com/questions/3341672/getting-the-real-facebook-profile-picture-url-from-graph-api

반응형