2011-01-31 6 views
1

나는 페이스 북의 API에 새로운데, 나는 작은 문제가있다. 사용자의 앨범에 사진을 업로드하려고합니다.facebook upload photo

$app_id = xxx; 
$app_secret = "xxx"; 
$my_url = "http://apps.facebook.com/myapp/test.php"; 

$code = $_REQUEST["code"]; 

if(empty($code)) { 
    $dialog_url = "http://www.facebook.com/dialog/oauth?client_id=" 
     . $app_id . "&redirect_uri=" . urlencode($my_url); 

    echo("<script> top.location.href='" . $dialog_url . "'</script>"); 
} 


$token_url = "https://graph.facebook.com/oauth/access_token?client_id=" 
    . $app_id . "&redirect_uri=" . urlencode($my_url) . "&client_secret=" 
    . $app_secret . "&code=" . $code; 

$access_token = file_get_contents($token_url); 

//upload photo 
$file= 'test.png'; 
$args = array(
    'message' => 'Photo from application', 
); 
$args[basename($file)] = '@' . realpath($file); 

print_r($args); 

$ch = curl_init(); 
$url = 'https://graph.facebook.com/2038278/photos?access_token='.$access_token; 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HEADER, false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $args); 
$data = curl_exec($ch); 
//returns the photo id 
print_r(json_decode($data,true)); 

을하지만 결과는 다음과 같습니다 :이를 위해 내가 스택 오버 플로우에, 내가 여기 발견했습니다 PHP 스크립트를 사용하고

배열 ([메시지] => 응용 프로그램에서 사진 [테스트 .PNG] => @/[MYPATH]는 /test.png) 배열 ([오류] => 배열 ([형태] => OAuthException [메일] => 오류 애플리케이션 검증.))

이것은 무엇을 의미 하는가 ? 내 응용 프로그램에 대한 권한을 확장해야합니까? 기본 및 user_photos에 액세스 권한을 부여했습니다.

대단히 고마워요!


두 번째 스크립트

APP_ID = "XXX"$; $ app_secret = "xxx"; $ my_url = "http://apps.facebook.com/myapp/test.php"; 당신이 페이스 북에 응용 프로그램에서 어떤 사진을 업로드 적, 페이스 북은 자동으로 응용 프로그램의 이름으로 앨범을 만들

$code = $_REQUEST["code"]; 

if(empty($code)) { 
    $dialog_url = "http://www.facebook.com/dialog/oauth?client_id=" 
     . $app_id . "&redirect_uri=" . urlencode($my_url) . "&scope=user_photos" ; 

    echo("<script> top.location.href='" . $dialog_url . "'</script>"); 
} 


$token_url = "https://graph.facebook.com/oauth/access_token?client_id=" 
    . $app_id . "&redirect_uri=" . urlencode($my_url) . "&client_secret=" 
    . $app_secret . "&code=" . $code; 

$access_token = file_get_contents($token_url); 









$token = $access_token; 

//upload photo 
$file= 'test.png'; 
$args = array(
'message' => 'Photo from application', 
); 
$args[basename($file)] = '@' . realpath($file); 

$ch = curl_init(); 
$url = 'https://graph.facebook.com/me/photos?access_token='.$token; 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HEADER, false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $args); 
$data = curl_exec($ch); 

print_r(json_decode($data,true)); 
+0

안녕하세요 당신이 사용자의 기존 앨범에 사진을 업로드 하시겠습니까? –

+0

안녕하세요! 테스트를 위해, 그게 내가 시도한거야,하지만 내 애플 리케이션에 대한 앨범을 자동으로 생성하는 것입니다 – maephisto

+0

그것은 '응용 프로그램 유효성 검사 오류'라고 말합니다 - 당신은 문제가 귀하의 페이 스북 응용 프로그램 자체로 확실하지 않습니까? 어쩌면 잘못 구성되었거나 초기 인증 단계에서 페이스 북에 맞는 키를 전달하지 않는 것입니까? –

답변

1

publish_stream이라는 허가를 요청하려면 신청서가 필요하다고 생각합니다. photo_upload이라는 또 다른 권한이 있는데, 나는 그것이 오래된 것으로 간주된다는 것을 이해함에 따라 (그러나 여전히 작동 할 수도 있음)

+0

감사합니다! 나는 양쪽 permision, 아무것도, 같은 예외를 시도했다 – maephisto

+1

어쩌면 당신은 페이 스북 그래프 API를 사용하여 그림을 업로드하는 방법에 대한 다른 튜토리얼을보고 싶다 : http://daipratt.co.uk/facebook-api -upload-photo / – Danilo

1

내 사랑. 당신은 어떤 것도 할 필요가 없습니다. 응용 프로그램의 사진을 업로드 한 다음 프로필로 이동하여 모든 앨범을 볼 수 있습니다. 그러면 Facebook의 응용 프로그램 이름과 업로드 된 사진이있는 앨범이 만들어집니다.

+0

나는 이것을 알고 있으며, 나는 이미 앨범을 자동으로 생성하는 또 다른 스크립트를 만들었다. 그러나 그것은 같은 상황입니다. 작동하지 않습니다. 나는 질문에 그것을 추가 할 것이다, 어쩌면 나는 무언가를 잘못하고있다. – maephisto

0

내가 당신이라면 나는 그렇게 가지 않을 것입니다. cURL 메서드는 최소한 나에게는 너무 복잡한 태드임이 입증되었습니다. 이들은이 정확한 문제에 대해 좋은 최근 블로그 게시물에 대한 링크를 볼 수 아래있는 단계는, 강구하여야한다

  1. 가져 오기 사용자의 (필요하지만, 미래의 발전을위한 좋은하지) user_photospublish_stream .
  2. 업로드하려는 사진이 포함될 사용자를 대신하여 앨범을 만듭니다.
  3. 방금 ​​만든 앨범의 앨범 ID를 가져옵니다.
  4. 사진의 매개 변수를 지정하십시오 : 함께가는 메시지, 서버에있는 파일의 위치 및 this docs reference about publishing photos (bottom of page)에서 찾을 수있는 다른 것들.
  5. 주어진 매개 변수로 사진을 업로드하십시오.

Dai Pratt's excellent tutorial on photo uploading via the New Graph API

중요 참고 : 앨범이 이미 존재하는 경우는 위의 경우에 당신이 사용자를 대신하여 여러 장의 사진을 업로드하려면, 확인하지 않습니다 스크립트에 심각한 결함이 있습니다.사용자 ID와 데이터베이스에 만든 앨범 ID를 데이터베이스에 저장하는 것이 중요하므로 사용자가 이미지를 업로드 할 때마다이 ID를 쿼리하여 그에 따라 앨범을 만들거나 만들지 않도록 할 수 있습니다.

EDIT : 게시 한 후 여기에 정확한 링크가 표시됩니다. 어쨌든이 도움이 되길 바랍니다.