2011-08-20 37 views
10

Tất cả các hướng dẫn tôi đã tìm thấy để tạo album Picasa và tải lên hình ảnh sử dụng Khung công tác Zend mà tôi chưa nghiên cứu.Tạo album Picasa và tải hình ảnh lên đó bằng PHP và cURL

Có thể tải lên hình ảnh và tạo album bằng PHP và cURL không?

hình ảnh của tôi được lưu trữ trong thư mục e:/images và các thông tin hình ảnh được lưu trữ trong một bảng MySQL như thế này:

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 ; 

Tôi nhận được mã xác thực khách hàng của Google bằng cách sử dụng đoạn mã sau:

<?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' => '[email protected]', 
'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 
?> 

Có ai có thể đưa ra một số hướng dẫn về cách tạo album có tên test và tải hình ảnh lên đó không?

EDIT1:

Làm thế nào để thêm giấy phép ảnh khi tôi tải ảnh với kịch bản php?

tham khảo trên 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 

Kiểm tra các dữ liệu phản hồi từ api có được hình ảnh album, cần có có cái gì đó như:

 "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" 
     }, 

Trả lời

4

Dưới đây là một số mã để tạo album. Chúng tôi sẽ nhận cuộc gọi cURL để xác thực.

//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); 

tải lên một bức ảnh công trình trong một thời trang tương tự:

http://code.google.com/apis/picasaweb/docs/2.0/developers_guide_protocol.html#PostPhotos

Dưới đây là hoạt mã cho tải lên một hình ảnh mà không 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); 

Và đây là một ví dụ về tải lên một bức ảnh với siêu dữ liệu (cuối cùng!):

$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); 
+0

đây là một số hướng dẫn trong trang web chính thức, tôi đã đọc, nhưng vẫn không biết cách viết nó vào mã php. một câu hỏi khác, cách thêm giấy phép ảnh khi tôi tải lên? cảm ơn. –

+0

Tôi đã cập nhật mã để tạo album. Tôi sẽ đăng một số mã tải lên hình ảnh nếu tôi có thể hiểu điều đó. –

+0

OK, cuối cùng tôi đã nhận được một số mã làm việc để tải lên hình ảnh. Tôi vẫn đang đấu tranh với việc tải lên một hình ảnh với siêu dữ liệu. –

1

Mở rộng câu trả lời của Mark, bạn có thể gửi XML trực tiếp từ curl sử dụng CURLOPT_POSTFIELDS. Tuy nhiên, thay vì tạo một mảng kết hợp, hãy thử chuyển chuỗi XML thực tế như vậy:

$data= "<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'>Trip To Italy</title> 
    <summary type='text'>This was the recent trip I took to Italy.</summary> 
    <gphoto:location>Italy</gphoto:location> 
    <gphoto:access>public</gphoto:access> 
    <gphoto:timestamp>1152255600000</gphoto:timestamp> 
    <media:group> 
    <media:keywords>italy, vacation</media:keywords> 
    </media:group> 
    <category scheme='http://schemas.google.com/g/2005#kind' 
    term='http://schemas.google.com/photos/2007#album'></category> 
</entry>"; 
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); 
Các vấn đề liên quan