Photobucket, Photos, and You Photobucket, Photos, and You

It seems like photo sharing and social network applications are the in thing right now. Let's take advantage of this. Today I will provide a simple class that will allow you to post photos to a user's Photobucket account in minutes.

Step 1: Visit http://photobucket.com/developer/register to register for an API key

Follow the steps to create a new application on Photobucket. When you have finished, Photobucket will send you an email with your API and Secret key. Keep this email for later use.


Step 2: Download the PHP API library

Download and extract the API library to your website directory.

Step 3: Create a photobucket_api.php file and place the following code in it:

<?php

// include the api

include_once('PBAPI-0.2.3/PBAPI.php');

class PhotobucketApi extends Object {

var $_instance;

var $_apikey;

var $_secretkey;

var $_userid;

var $_authToken;

var $_authTokenSecret;

var $_albumid;

function __construct($apikey, $secretkey) {

$this->_apikey = $apikey;

$this->_secretkey = $secretkey;

$this->_instance = new PBAPI($this->_apikey, $this->_secretkey);

// if we don't have session keys for our tokens, get them now

if (empty($_SESSION['pb_authToken'])) {

$params = $this->_instance->login('request')->post()->getResponseString();

$this->_instance->loadTokenFromResponse();

$params = $this->parseResults($params);

$this->_authToken = urlencode($params['oauth_token']);

$this->_authTokenSecret = urlencode($params['oauth_token_secret']);

// store them in session

$_SESSION['pb_authToken'] = $this->_authToken;

$_SESSION['pb_authTokenSecret'] = $this->_authTokenSecret;

} else {

$this->_authToken = $_SESSION['pb_authToken'];

$this->_authTokenSecret = $_SESSION['pb_authTokenSecret'];

unset($_SESSION['pb_authToken']);

unset($_SESSION['pb_authTokenSecret']);

}

}

function setup() {

$this->_instance->setOAuthToken($this->_authToken, $this->_authTokenSecret);

$params = $this->_instance->login('access')->post()->getResponseString();

$this->_instance->loadTokenFromResponse();

$params = $this->parseResults($params);

// update the auth tokens

$this->_authToken = $params['oauth_token'];

$this->_authTokenSecret = $params['oauth_token_secret'];

// set the sub domain

$this->_instance->setSubdomain($params['subdomain']);

// get the username

$this->_userid = $params['username'];

}

function get_album_by_name($name) {

$this->_instance->setOAuthToken($this->_authToken, $this->_authTokenSecret);

$contents = $this->_instance->album($this->_userid)->get()->getResponseString();

$parser = xml_parser_create('');

$albums = array();

xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, 'UTF-8');

xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);

xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);

xml_parse_into_struct($parser, trim($contents), $albums);

xml_parser_free($parser);

// loop through them all and check if it exists

foreach ($albums as $album) {

if ($album['tag'] == 'album' && isset($album['attributes'])) {

if ($album['attributes']['name'] == $name)

return $album['attributes']['name'];

}

}

return null;

}

function create_album() {

$this->_albumid = $this->get_album_by_name('My Album');

// if the album does not exist, create it

if (!$this->_albumid) {

// create album

$this->_albumid = 'My Album';

$this->_instance->setOAuthToken($this->_authToken, $this->_authTokenSecret);

$params = $this->_instance->album($this->_userid, array('name' =>

$this->_albumid))->post()->getResponseString();

}

}

function upload_photo($filename) {

// step 1: call create album, create album will check if it exists and return us the album id

$this->create_album();

// step 2: upload photo with album id

$this->_instance->setOAuthToken($this->_authToken, $this->_authTokenSecret);

$params = $this->_instance->album($this->_userid . '/' . $this->_albumid)->upload(array('type' => 'image',

'uploadfile' => "@$filename"))->post()->getResponseString();

$parser = xml_parser_create('');

$results = array();

xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, 'UTF-8');

xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);

xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);

xml_parse_into_struct($parser, trim($params), $results);

xml_parser_free($parser);

$link = $results[3]['value'];

// step 3: delete the photo after upload

unlink($filename);

unset($_SESSION['pb_authToken']);

unset($_SESSION['pb_authTokenSecret']);

return $link;

}

function parseResults($params) {

$params = explode("&", $params);

$resp = array();

foreach ($params as $param) {

$temp = explode("=", $param);

$resp[$temp[0]] = $temp[1];

}

return $resp;

}

}

?>

Please note: you may need to update the include_once() path for the API library.

Step 4: Create a new file to instantiate and use our class

Below is an example file that instantiates and uses our API:

// Configure Photobucket component

$this->pb_apikey = "xxxxxxxxxxx";

$this->pb_secretkey = "xxxxxxxxxxxxxxxxxxxxxxxxx";

include_once(photobucket_api.php');

$this->PhotobucketApi = new PhotobucketApi($this->pb_apikey, $this->pb_secretkey);

$this->pb_authToken = $this->PhotobucketApi->_authToken;

// redirect users to login to photobucket

Header('Location: http://photobucket.com/apilogin/login?oauth_token=' . $this->pb_authToken);

You will need to update the API key, Secret key, and potentially the include_once() path.

Step 5: Create another new file to upload our file

When you setup your application you need to specify a callback URL. Enter the path to this new page. Below is example code after the user has logged in to post a photo:

// Configure Photobucket component

$this->pb_apikey = "xxxxxxxxxxx";

$this->pb_secretkey = "xxxxxxxxxxxxxxxxxxxxxxxxx";

include_once(photobucket_api.php');

$this->PhotobucketApi = new PhotobucketApi($this->pb_apikey, $this->pb_secretkey);

$this->pb_authToken = $this->PhotobucketApi->_authToken;

$filename = 'file_to_upload_can_be_already_on_drive_or_from_a_file_upload.png';

// setup the platform

$this->PhotobucketApi->setup();

// upload the photo

$link = $this->PhotobucketApi->upload_photo($filename);

// redirect to link

Header('Location: ' . $link);

That's it, photos will now be added to an album called "My Album".

Published on May 23, 2009

Tags: Facebook | CakePHP Tutorial | Photobucket

Related Posts

Did you enjoy this article? If you did here are some more articles that I thought you will enjoy as they are very similar to the article that you just finished reading.

Tutorials

Learn how to code in HTML, CSS, JavaScript, Python, Ruby, PHP, Java, C#, SQL, and more.

No matter the programming language you're looking to learn, I've hopefully compiled an incredible set of tutorials for you to learn; whether you are beginner or an expert, there is something for everyone to learn. Each topic I go in-depth and provide many examples throughout. I can't wait for you to dig in and improve your skillset with any of the tutorials below.