I can create an album using facebook graph api by posting data to
http://graph.facebook.com/ALBUM_ID/albums
it returns an id, which is not
The new php-sdk is working just fine, I've just tested it and here are my comments:
1.Make sure you have the right extended permission which is publish_stream for both Album creation and Photo upload.
2.After creating the Album using the below code, you'll receive the Album ID:
$post_data = array(
'name'=>"My Test Album",
'description'=>"My Test Album Desc"
);
$data['album'] = $this->facebook->api("/me/albums", 'post', $post_data);
P.S: I confirm this ID is NOT the ID you see when browsing Facebook
3.Now we need to upload the image with the Album "reference" ID you got:
$file = FCPATH . "assets/img/small1.jpg";
$post_data = array(
"message" => "My photo caption",
"source" => '@' . realpath($file)
);
$album_id = "473425002142";
$data['photo'] = $this->facebook->api("/$album_id/photos", 'post', $post_data);
P.S: the Constant FCPATH
is a Codeigniter constant, you can you $_SERVER['DOCUMENT_ROOT']
or whatever method you are comfortable with.
And the result:
I have actually faced the exact same problem, but with Events. What happens is Facebook does not return the actual event ID (in your case, the Album ID), but instead there's a small offset (with a maximum of 10). So, here's the workflow you need to follow (in order to make it work!):
fb_aid
in your database.$fbAlbums = $this->facebook->api(array('method' => 'photos.getalbums'));
$myAlbums = $this->Album->find('all');
for ($i = 0; $i < count($fbAlbums); ++$i) {
foreach ($myAlbums as $myAlbum) {
$aidOffset = abs($fbAlbums[$i]['aid'] - $myAlbum['Album']['fb_aid']);
if ($aidOffset != 0 // Prevents fixing an already fixed album id
&& $aidOffset < 10 // Checks if this is a FB ID Screw up
) {
$myAlbum['Album']['fb_aid'] = $fbAlbums[$i]['aid'];
$this->Album->save($myAlbum);
break; // Little optimization
}
}
}
Now your database has updated album IDs. Hurray! Developer: 1. Facebook API: 0.
I know it's not pretty. I know there are so many potential problems with it. But it gets the job done until Facebook cares enough to fix its API.