post-image

Sử dụng PHP CURL tạo album Picasa và trả về ID album

Tổng quan

Tiếp bước bài viết sử dụng curl để upload hình lên Picasa thì chúng ta sẽ tìm hiểu làm thế nào để tạo một album mới trong picasa, trong bài này chúng ta sẽ sử dụng PHP CURL và có kế thừa hàm login google ở bài trước để thực hiện tạo album trên Picasa.

1. Tại sao phải tạo album khi dùng CURL upload hình lên Picasa

Lý do đơn giản nhất là trong Picasa chỉ cho phép chúng ta upload bao nhiêu hình cho một album, lúc trước là 1000 hình nhưng bây giờ là 2000 hình thì phải. Nên nếu chúng ta gán albumID cố định thì sau khi hết số lượng cho phép sẽ không up thêm được nữa. Lúc này ta phải đăng nhập vào Picasa để tạo album khác và lấy ID của album đó, thật là rườm rà phải không nào. Chính vì vậy Google có cung cấp cho chúng ta API để tạo album và đương nhiên là sẽ có những header thông số cấu hình như tên album, mô tả album kèm theo khi tạo.

Cấu trúc header:

$header = array(
    'Content-Type: application/atom+xml',
    'Authorization:  GoogleLogin auth="' . $key . '"',
    "MIME-Version: 1.0"
);Code language: PHP (php)

Trong đó $key là ID mà google cung cấp kh

Cấu trúc XML:

$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'>$titleAlbum</title>
           <summary type='text'>$descAlbum</summary>
           <gphoto:location>Viet Nam</gphoto:location>
           <gphoto:access>public</gphoto:access>
           <gphoto:timestamp>".time()."</gphoto:timestamp>
           <category scheme='http://schemas.google.com/g/2005#kind'
           term='http://schemas.google.com/photos/2007#album'></category>
           </entry>";Code language: HTML, XML (xml)

Trong đó:

  • $titleAlbum: là tiêu đề của album
  • $descAlbum: là mô tả của album
  • time(): là thời gian tạo album

2. Hàm tạo album Picasa sử dụng CURL trong PHP

Bây giờ chúng ta sử dụng CURL và các thông số header, xml ở trên để tạo album, các bước như sau:

  • Đăng nhập google để lấy $key, sau đó gán key vào header
  • Sử dụng CURL truyền các tham số header và xml vào thực thi trả kết quả về.
  • Dựa vào kết quả lấy ID album và sau đó lưu vào nơi lưu trữ

Chi tiết hàm tạo album picasa như sau:

function create_album_picasa($accountID = '', $titleAlbum = 'Tiêu đề album', $descAlbum = 'Tiêu đề album')
{
    $key = login_google();
 
    // Kiểm tra key login
    if (!$key){
        return 'Không thể đăng nhập vào tài khoản Google';
    }
     
    // Cấu trúc XML tạo 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'>$titleAlbum</title>
               <summary type='text'>$descAlbum</summary>
               <gphoto:location>Viet Nam</gphoto:location>
               <gphoto:access>public</gphoto:access>
               <gphoto:timestamp>".time()."</gphoto:timestamp>
               <category scheme='http://schemas.google.com/g/2005#kind'
               term='http://schemas.google.com/photos/2007#album'></category>
               </entry>";
 
    $header = array(
        'Content-Type: application/atom+xml',
        'Authorization:  GoogleLogin auth="' . $key . '"',
        "MIME-Version: 1.0"
    );
     
    // Thiết lập CURL OPTIONS
    $ch = curl_init();  
    curl_setopt($ch, CURLOPT_URL, "https://picasaweb.google.com/data/feed/api/user/$accountID");  
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);  
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);  
    curl_setopt($ch, CURLOPT_POST, true);  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
    curl_setopt($ch, CURLOPT_POSTFIELDS, $rawXml);  
    curl_setopt($ch, CURLOPT_HEADER, true);  
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);  
     
    $ret = curl_exec($ch);
     
    if (preg_match('#<id>.+?albumid/(.+?)</id>#i', $ret, $match)) {
        return $match[1];
    }
    return false;
}Code language: PHP (php)

Trong đó các tham số:

  • $accountID là ID của tài khoản hiện tại
  • $titleAlbum là tiêu đề của album
  • $descAlbum là mô tả cho album

Trong hàm tôi có sử dụng hàm login_google() mà ở bài upload hình lên picasa chúng ta đã trình bày, nội dung hàm đó như sau:

function login_google()
{
    // Đăng nhập vào account
    $data = array(
        'accountType'   => 'GOOGLE',  
        'Email'         => '[email protected]',  // Email của bạn
        'Passwd'        => 'your_pass',             // Mật khẩu của bạn
        'source'        => __FILE__,  
        'service'       =>'lh2'
    ); 
 
    $ch = curl_init();  
    curl_setopt($ch, CURLOPT_URL, "https://www.google.com/accounts/ClientLogin");  
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);  
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);  
    curl_setopt($ch, CURLOPT_POST, true);  
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1" );
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);  
    $hasil = curl_exec($ch);  
 
    // Kiểm tra kết quả thành công hay thất bại
    // Nếu thành công thì google sẽ trả về đoạn mã có định dạng
    // Auth=key, nên ta lấy key bằng cách sử dụng hàm preg_match
    if (preg_match('#Auth=([a-z0-9_\-]+)#i', $hasil, $match)) 
    {
        return $match[1];
    }
    return false;
}Code language: PHP (php)

Cách sử dụng hàm tạo album picasa

echo create_album_picasa('104078062985748317081', 'tiêu đề album', 'mô tả album');Code language: PHP (php)

Quá đơn giản phải không nào.

3. Lời kết

Bài này mục đích hướng dẫn bạn tạo và sử dụng hàm tạo album mới picasa sử dụng code PHP để kết hợp với bài trước. Serie này chúng ta sẽ làm đủ ba thao tác đó là upload hình picasa, tạo album picasa, xóa album picasa, sau đó chúng ta kết hợp lại thành một class chuyên xử lý hình trên Picasa để các bạn dễ dàng sử dụng.

Nguồn: https://freetuts.net/su-dung-php-curl-tao-album-picasa-va-tra-ve-id-album-245.html

Trả lời

Email của bạn sẽ không được hiển thị công khai.