创建Picasa相册,然后使用PHP和cURL将图像上传到该相册 [英] Create a Picasa album and upload images to it with PHP and cURL
问题描述
我发现有关创建Picasa相册和上传图片的所有教程都使用了我尚未研究的Zend框架.
All of the tutorials I've found for creating Picasa albums and uploading pictures use the Zend Framework which I haven't studied.
是否可以使用PHP和cURL上传图像并创建相册?
Is it possible to upload images and create albums using PHP and cURL?
我的图像存储在目录e:/images
中,图像信息存储在MySQL表中,如下所示:
My images are stored in the directory e:/images
and the image information is stored in a MySQL table like this:
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
CREATE TABLE IF NOT EXISTS `picasaimage` (
`id` bigint(1) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`content` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`tags` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`license` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`image_path` varchar(150) COLLATE utf8_unicode_ci NOT NULL,
`width` int(4) COLLATE utf8_unicode_ci NOT NULL,
`height` int(4) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=0 ;
我正在使用以下代码获取Google Client身份验证代码:
I'm getting the Google Client authentication code using the following code:
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.google.com/accounts/ClientLogin");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$data = array('accountType' => 'GOOGLE',
'Email' => 'youremailaddress@gmail.com',
'Passwd' => 'yourpassword',
'source'=>'PHI-cUrl-Example',
'service'=>'lh2');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$hasil = curl_exec($ch);
echo $hasil;
//SID=DQA...oUE
//LSID=DQA...bbo
//Auth=DQA...Sxq
?>
任何人都可以提供一些指导来创建名为test
的相册并将图像上传到其中吗?
Can anyone give some guidance on creating an album named test
and uploading the images to it?
当我使用php脚本上传照片时如何添加照片许可证?
How to add photo license when I upload photos with php scripts?
http://commons.wikimedia.org/wiki/Commons:Picasa_Web_Albums_files
Creative Commons Attribution 3.0 Unported (CC-BY)
Creative Commons Attribution-Share Alike 3.0 Unported
Unlicensed
Creative Commons Attribution-Noncommercial 3.0 Unported
Creative Commons Attribution-No Derivative Works 3.0 Unported
Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported
从api获取相册照片检查响应数据,应该有类似以下内容:
Check the response data from api get album photo, there should be have something like:
"gphoto$license":{
"$t":"ATTRIBUTION_NON_COMMERCIAL_NO_DERIVATIVES",
"id":3,
"name":"Attribution-Noncommercial-No Derivative",
"url":"http://creativecommons.org/licenses/by-nc-nd/3.0"
},
推荐答案
以下是用于创建相册的一些代码.我们将使用cURL调用进行身份验证.
Here's some code for creating the album. We'll pick up with the cURL call to authenticate.
//This is the cURL call to authenticate. We'll splitting out the return values
//to more easily get the auth code.
$ret = explode("\n",curl_exec($ch));
//Save all of the return values to an array so we can get them more easily later
$gvals = array();
foreach($ret as $item) {
$flds = explode("=", $item);
if(count($flds) > 1) {
$gvals[$flds[0]] = $flds[1];
}
}
//This is the authentication header we'll need to pass with each successive call
$authHeader = 'Authorization: GoogleLogin auth="' . $gvals['Auth'] . '"';
$userId = "THE PICASA USER ID GOES HERE";
$feedUrl = "https://picasaweb.google.com/data/feed/api/user/$userId";
//This is the XML for creating a new album.
$rawXml = "<entry xmlns='http://www.w3.org/2005/Atom'
xmlns:media='http://search.yahoo.com/mrss/'
xmlns:gphoto='http://schemas.google.com/photos/2007'>
<title type='text'>Test album from PHP</title>
<summary type='text'>This is a test album</summary>
<gphoto:location>Louisville</gphoto:location>
<gphoto:access>public</gphoto:access>
<gphoto:timestamp>1152255600000</gphoto:timestamp>
<category scheme='http://schemas.google.com/g/2005#kind'
term='http://schemas.google.com/photos/2007#album'></category>
</entry>";
//Setup our cURL options
//Notice the last one where we pass in the authentication header
$options = array(
CURLOPT_URL=> $feedUrl,
CURLOPT_SSL_VERIFYPEER=> false,
CURLOPT_POST=> true,
CURLOPT_RETURNTRANSFER=> true,
CURLOPT_HEADER=> true,
CURLOPT_FOLLOWLOCATION=> true,
CURLOPT_POSTFIELDS=> $rawXml,
CURLOPT_HTTPHEADER=> array('GData-Version: 2', $authHeader, 'Content-Type: application/atom+xml')
);
curl_setopt_array($ch, $options);
//This call will create the Picasa album.
//The return value is XML with a bunch of information about the newly created album.
$ret = curl_exec($ch);
上传照片的方式与此类似:
Uploading a photo works in a similar fashion:
http://code.google.com/apis/picasaweb/docs/2.0/developers_guide_protocol.html#PostPhotos
以下功能代码用于上传没有 元数据的图像:
Here's functioning code for uploading an image without metadata:
$userId = "USER ID GOES HERE";
$albumId = "ALBUM ID GOES HERE";
$albumUrl = "https://picasaweb.google.com/data/feed/api/user/$userId/albumid/$albumId";
$imgName = $_SERVER['DOCUMENT_ROOT'] . '/picasa/cute_baby_kitten.jpg';
//Get the binary image data
$fileSize = filesize($imgName);
$fh = fopen($imgName, 'rb');
$imgData = fread($fh, $fileSize);
fclose($fh);
$header = array('GData-Version: 2', $authHeader, 'Content-Type: image/jpeg', 'Content-Length: ' . $fileSize, 'Slug: cute_baby_kitten.jpg');
$data = $imgData; //Make sure the image data is NOT Base64 encoded otherwise the upload will fail with a "Not an image" error
$ret = "";
$ch = curl_init($albumUrl);
$options = array(
CURLOPT_SSL_VERIFYPEER=> false,
CURLOPT_POST=> true,
CURLOPT_RETURNTRANSFER=> true,
CURLOPT_HEADER=> true,
CURLOPT_FOLLOWLOCATION=> true,
CURLOPT_POSTFIELDS=> $data,
CURLOPT_HTTPHEADER=> $header
);
curl_setopt_array($ch, $options);
$ret = curl_exec($ch);
curl_close($ch);
这是一个上传带有 元数据的照片的示例(最终!):
And here's an example of uploading a photo with metadata (finally!):
$albumUrl = "https://picasaweb.google.com/data/feed/api/user/$userId/albumid/$albumId";
$imgName = $_SERVER['DOCUMENT_ROOT'] . '/picasa/cute_baby_kitten.jpg';
$rawImgXml = '<entry xmlns="http://www.w3.org/2005/Atom">
<title>plz-to-love-realcat.jpg</title>
<summary>Real cat wants attention too.</summary>
<category scheme="http://schemas.google.com/g/2005#kind"
term="http://schemas.google.com/photos/2007#photo"/>
</entry>';
$fileSize = filesize($imgName);
$fh = fopen($imgName, 'rb');
$imgData = fread($fh, $fileSize);
fclose($fh);
$dataLength = strlen($rawImgXml) + $fileSize;
$data = "";
$data .= "\nMedia multipart posting\n";
$data .= "--P4CpLdIHZpYqNn7\n";
$data .= "Content-Type: application/atom+xml\n\n";
$data .= $rawImgXml . "\n";
$data .= "--P4CpLdIHZpYqNn7\n";
$data .= "Content-Type: image/jpeg\n\n";
$data .= $imgData . "\n";
$data .= "--P4CpLdIHZpYqNn7--";
$header = array('GData-Version: 2', $authHeader, 'Content-Type: multipart/related; boundary=P4CpLdIHZpYqNn7;', 'Content-Length: ' . strlen($data), 'MIME-version: 1.0');
$ret = "";
$ch = curl_init($albumUrl);
$options = array(
CURLOPT_SSL_VERIFYPEER=> false,
CURLOPT_POST=> true,
CURLOPT_RETURNTRANSFER=> true,
CURLOPT_HEADER=> true,
CURLOPT_FOLLOWLOCATION=> true,
CURLOPT_POSTFIELDS=> $data,
CURLOPT_HTTPHEADER=> $header
);
curl_setopt_array($ch, $options);
$ret = curl_exec($ch);
curl_close($ch);
这篇关于创建Picasa相册,然后使用PHP和cURL将图像上传到该相册的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!