Skip to content

Commit 88f62fb

Browse files
committed
Add Flickr upload photo example
1 parent 4d6f705 commit 88f62fb

File tree

2 files changed

+160
-0
lines changed

2 files changed

+160
-0
lines changed

examples/Flickr.class.php

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
<?php
2+
define('FLICKR_API_KEY', 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
3+
define('FLICKR_API_SECRET', 'XXXXXXXXXXXXXXXX');
4+
5+
6+
class Flickr
7+
{
8+
public function __construct()
9+
{
10+
if (session_status() === PHP_SESSION_NONE) {
11+
session_start();
12+
}
13+
}
14+
15+
public function authenticate()
16+
{
17+
if (isset($_SESSION['authenticated']) && $_SESSION['authenticated']) {
18+
return;
19+
}
20+
21+
if (isset($_GET['oauth_token']) && isset($_GET['oauth_verifier'])) {
22+
$this->getAccessToken();
23+
} else {
24+
$this->getRequestToken();
25+
}
26+
}
27+
28+
public function uploadPhoto()
29+
{
30+
$oauth_data = $this->getOAuthParameters();
31+
$oauth_data['oauth_token'] = $_SESSION['oauth_access_token'];
32+
$oauth_data['title'] = $_POST['title'];
33+
$oauth_data['tags'] = $_POST['tags'];
34+
35+
$upload_url = 'https://up.flickr.com/services/upload/';
36+
$oauth_data['oauth_signature'] = $this->getSignature('POST', $upload_url, $oauth_data);
37+
$oauth_data['photo'] = '@' . $_FILES['photo']['tmp_name'];
38+
39+
$curl = new Curl();
40+
$curl->post($upload_url, $oauth_data);
41+
return $curl;
42+
}
43+
44+
private function getOAuthParameters()
45+
{
46+
return array(
47+
'oauth_nonce' => md5(microtime() . mt_rand()),
48+
'oauth_timestamp' => time(),
49+
'oauth_consumer_key' => FLICKR_API_KEY,
50+
'oauth_signature_method' => 'HMAC-SHA1',
51+
'oauth_version' => '1.0',
52+
);
53+
}
54+
55+
private function getSignature($request_method, $url, $parameters)
56+
{
57+
ksort($parameters, SORT_STRING);
58+
$request = implode('&', array(
59+
rawurlencode($request_method),
60+
rawurlencode($url),
61+
rawurlencode(http_build_query($parameters, '', '&', PHP_QUERY_RFC3986)),
62+
));
63+
$key = FLICKR_API_SECRET . '&';
64+
if (!empty($_SESSION['oauth_access_token_secret'])) {
65+
$key .= $_SESSION['oauth_access_token_secret'];
66+
} elseif (!empty($_SESSION['oauth_token_secret'])) {
67+
$key .= $_SESSION['oauth_token_secret'];
68+
}
69+
$signature = base64_encode(hash_hmac('sha1', $request, $key, true));
70+
return $signature;
71+
}
72+
73+
private function getRequestToken()
74+
{
75+
$oauth_data = $this->getOAuthParameters();
76+
$oauth_data['oauth_callback'] = implode('', array(
77+
isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ? 'https' : 'http',
78+
'://',
79+
$_SERVER['SERVER_NAME'],
80+
$_SERVER['SCRIPT_NAME'],
81+
));
82+
83+
$request_token_url = 'https://www.flickr.com/services/oauth/request_token';
84+
$oauth_data['oauth_signature'] = $this->getSignature('POST', $request_token_url, $oauth_data);
85+
86+
$curl = new Curl();
87+
$curl->post($request_token_url, $oauth_data);
88+
89+
parse_str($curl->response, $parts);
90+
$_SESSION['oauth_token_secret'] = $parts['oauth_token_secret'];
91+
92+
// Continue to Flickr for user's authorization.
93+
header('Location: https://secure.flickr.com/services/oauth/authorize?' . http_build_query(array(
94+
'oauth_token' => $parts['oauth_token'],
95+
'perms' => 'write',
96+
)));
97+
exit;
98+
}
99+
100+
private function getAccessToken()
101+
{
102+
$oauth_data = $this->getOAuthParameters();
103+
$oauth_data['oauth_token'] = $_GET['oauth_token'];
104+
$oauth_data['oauth_verifier'] = $_GET['oauth_verifier'];
105+
106+
$access_token_url = 'https://www.flickr.com/services/oauth/access_token';
107+
$oauth_data['oauth_signature'] = $this->getSignature('POST', $access_token_url, $oauth_data);
108+
109+
$curl = new Curl();
110+
$curl->post($access_token_url, $oauth_data);
111+
112+
parse_str($curl->response, $parts);
113+
$_SESSION['oauth_access_token'] = $parts['oauth_token'];
114+
$_SESSION['oauth_access_token_secret'] = $parts['oauth_token_secret'];
115+
$_SESSION['user_id'] = $parts['user_nsid'];
116+
$_SESSION['authenticated'] = true;
117+
}
118+
}

examples/flickr_upload_photo.php

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
require '../src/Curl.class.php';
3+
require 'Flickr.class.php';
4+
5+
6+
$flickr = new Flickr();
7+
$flickr->authenticate();
8+
?>
9+
<!doctype html>
10+
<html>
11+
<head>
12+
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
13+
<title>Flickr Photo Upload</title>
14+
</head>
15+
<body>
16+
17+
<?php
18+
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
19+
$result = $flickr->uploadPhoto();
20+
if ($result->error) {
21+
echo '<p>Photo upload failed.</p>';
22+
} else {
23+
$user_id = $_SESSION['user_id'];
24+
$photo_id = $result->response->photoid;
25+
$photo_url = 'http://www.flickr.com/photos/' . $user_id . '/' . $photo_id;
26+
echo '<p>Photo uploaded successfully. <a href="' . $photo_url . '">View photo</a>.</p>';
27+
}
28+
}
29+
?>
30+
31+
<form enctype="multipart/form-data" method="post">
32+
<fieldset>
33+
<legend>Flickr Photo Upload</legend>
34+
<label>Photo <input name="photo" type="file" /></label><br />
35+
<label>Title <input name="title" placeholder="Vacation (optional)" type="text" /></label><br />
36+
<label>Tags <input name="tags" placeholder="tropical,beach,vacation (optional)" type="text" /></label><br />
37+
<input type="submit" />
38+
</fieldset>
39+
</form>
40+
41+
</body>
42+
</html>

0 commit comments

Comments
 (0)