Cảnh báo: Trang này nói về các API cũ hơn của Google, tức là Google Data API; trang này chỉ liên quan đến những API có trong thư mục Google Data API. Nhiều API trong số đó đã được thay thế bằng các API mới hơn. Để biết thông tin về một API mới cụ thể, hãy xem tài liệu của API mới đó. Để biết thông tin về cách uỷ quyền cho các yêu cầu bằng một API mới hơn, hãy xem phần Xác thực và uỷ quyền Tài khoản Google.
Ryan Boyd, Nhóm API dữ liệu của GoogleTháng 9 năm 2007
- Giới thiệu
- Nhận và cài đặt cURL
- Xác thực với Dịch vụ dữ liệu của Google
- Truy xuất nguồn cấp dữ liệu và mục
- Cập nhật mục
- Tạo mục nhập
- Xoá mục
- Tải đối tượng nghe nhìn lên
- Các công cụ dòng lệnh khác
- Lời kết
Giới thiệu
Về cơ bản, Google Data API sử dụng nguồn cấp dữ liệu và mục Atom (XML) làm định dạng dữ liệu và HTTP làm giao thức truyền dữ liệu – mở rộng Giao thức xuất bản Atom. Chúng tôi xuất bản một số thư viện ứng dụng để giúp bạn tương tác dễ dàng hơn với Google Data API. Tuy nhiên, bạn luôn có thể sử dụng các công cụ cấp thấp hơn để làm việc với các dịch vụ của chúng tôi. Chỉ cần một chút hướng dẫn, bạn có thể dễ dàng thực hiện việc này.
cURL là một ứng dụng dòng lệnh để thực hiện các yêu cầu bằng nhiều giao thức, bao gồm cả HTTP. Nhà phát triển thường sử dụng cURL để kiểm thử các dịch vụ của Google Data, vì cURL hỗ trợ chức năng HTTP cần thiết để tương tác với các API ở cấp thấp.
cURL chỉ hỗ trợ thực hiện giao tiếp HTTP, vì vậy, bạn cần phải có kiến thức về giao thức Dữ liệu của Google, giao thức dành riêng cho dịch vụ và định dạng dữ liệu XML được sử dụng để làm việc với ứng dụng. Bài viết này cũng đề cập đến một số công cụ khác giúp bạn thực hiện những việc này dễ dàng hơn.
Bài viết này sử dụng các ví dụ dựa trên Data API của Album Web Picasa. Tuy nhiên, bạn có thể dễ dàng áp dụng tất cả các ví dụ này cho Google Data API khác.
Lấy và cài đặt cURL
cURL thường có sẵn trong bản cài đặt mặc định của nhiều nền tảng UNIX/Linux. Hãy thử nhập curl
vào trình bao yêu thích của bạn để xem công cụ này đã được cài đặt và có trong PATH
hay không. Nếu bạn chưa cài đặt công cụ này, hãy truy cập vào trang tải xuống trên trang web cURL để lấy nguồn chính thức hoặc gói nhị phân do người dùng đóng góp. Xin lưu ý rằng công cụ dòng lệnh này sử dụng thư viện libcurl
. Thư viện này có thể được cung cấp dưới dạng một gói tải xuống riêng biệt. Vì vậy, nếu bạn không biên dịch từ nguồn, hãy nhớ tải gói "nhị phân" xuống thay vì gói "libcurl". Bạn phải có các gói hỗ trợ SSL nếu muốn sử dụng cURL để nhận mã thông báo xác thực hoặc truy cập vào một số dịch vụ dữ liệu của Google yêu cầu sử dụng SSL cho các yêu cầu.
Xác thực với Dịch vụ dữ liệu của Google
Các yêu cầu về Dữ liệu của Google đã xác thực được thực hiện bằng cách thêm một tiêu đề HTTP vào yêu cầu. Tiêu đề này chứa mã thông báo xác thực ClientLogin (ứng dụng dành cho máy tính/thiết bị di động) hoặc AuthSub (ứng dụng web). Để kiểm thử bằng cURL, ClientLogin là phương thức dễ dàng hơn và được ghi lại bên dưới. Bạn có thể sử dụng tiêu đề xác thực AuthSub với cURL, nhưng quy trình nâng cao hơn để lấy mã thông báo nằm ngoài phạm vi của bài viết này.
Sử dụng ClientLogin
ClientLogin dành cho các ứng dụng đã cài đặt (máy tính/thiết bị di động). Với phương thức xác thực này, ứng dụng sử dụng Google Data API sẽ trực tiếp xử lý tên người dùng và mật khẩu của người dùng.
Yêu cầu xác thực cho ClientLogin lấy tên người dùng, mật khẩu và tên dịch vụ làm biến đăng biểu mẫu. Các biến này được truyền lần lượt dưới dạng đối số Email
, Passwd
và service
. Yêu cầu này sẽ tạo ra một phản hồi có nhiều mã thông báo, trong đó có một mã thông báo có thể dùng để đưa ra yêu cầu cho dịch vụ Dữ liệu của Google. Xin lưu ý rằng các đối số dữ liệu được truyền bằng curl
phải được mã hoá URL nếu chứa các ký tự không phải là ASCII. Các ký tự này thường xuất hiện trong các đối số Email
và Passwd
. Bạn có thể yêu cầu curl
mã hoá URL cho các đối số này bằng cách sử dụng cờ --data-urlencode
.
Yêu cầu mẫu:
curl https://www.google.com/accounts/ClientLogin \ --data-urlencode Email=brad.gushue@example.com --data-urlencode Passwd=new+foundland \ -d accountType=GOOGLE \ -d source=Google-cURL-Example \ -d service=lh2
Ví dụ về phản hồi:
SID=DQAAAHYBADCv2pSv7nflacDNwz3zEDUGtrSvNVDcpkSfddi77b3U5sEaHmP8YLWhmA36F9rk85mL8J5dqo4apn0T1vKz0fPGI9Xtnuet6cuE2ZzYvrNIwbSC_HjTqF4zudNQnnlDuD2wqZT-g1qXI8KhGAQZV4NexHZoQPlabTsGuRZeIBxj1A LSID=EUBBBIaBADCl-kNxvRVmcQghpt3cqSMfEooKR9flLOUZqwgP9OrZS83gse-KSdTNeXhxsET7FYenDhceP9lIPOmesH-t9qh-AWUHjjMdZEbUNeF9mWyzln6Z-FajaiG-cVFkqW0ZJ8ZbnCP30xXj6xFK6QxaAcqy_9Pej8jhEnxS9E61ftQGPg Auth=EUBBIacAAADK-kNxvRVmcQghpt3cqSMfEooLNMflLNIQqwgP9OrZS83gs-KSdTNeXhxsET7FYePWmaD8Vsy1V4LSUGMUP48Je2TO8OcjBj6HgAtPhiZeX-gKDfagZDK44j4n-Tkb44nhOnp2_QPSnBj3Z2vYwOEDjjG3Q53aQVC2132JKOuGh
Vui lòng xem tài liệu ClientLogin để biết thông tin cụ thể về các tham số được dùng trong yêu cầu nêu trên. Trong ví dụ này, dịch vụ mà chúng ta đang sử dụng là Picasa Web Albums Data API. Tên dịch vụ (service
) là lh2
. Bạn có thể tìm thấy tên dịch vụ của các dịch vụ dữ liệu khác của Google trên trang Câu hỏi thường gặp về Google Data API.
Giá trị của mã thông báo Auth
trong phản hồi ở trên là giá trị duy nhất cần thiết để xác thực cho các dịch vụ dữ liệu của Google. Giá trị của mã thông báo này được tạo thành một tiêu đề HTTP, sau đó được dùng cho mỗi yêu cầu đến một dịch vụ dữ liệu của Google.
curl --silent --header "Authorization: GoogleLogin auth=EUBBIacAAADK\ -kNxvRVmcQghpt3cqSMfEooLNMflLNIQqwgP9OrZS83gs-KSdTNeXhxs\ ET7FYePWmaD8Vsy1V4LSUGMUP48Je2TO8OcjBj6HgAtPhiZeX-gKDfag\ ZDK44j4n-Tkb44nhOnp2_QPSnBj3Z2vYwOEDjjG3Q53aQVC2132JKOuGh" \ "http://picasaweb.google.com/data/feed/api/user/default"
Lưu ý: Phương thức thoát ký tự dòng mới bằng ký tự dấu gạch chéo ngược ("\") ở trên không hoạt động trong trình bao lệnh Windows, vì vậy, bạn phải nhập toàn bộ lệnh trên một dòng nếu đang chạy curl
trên Windows.
Truy xuất nguồn cấp dữ liệu và mục
Trong Google Data APIs, việc truy xuất nguồn cấp dữ liệu và mục được thực hiện bằng cách thực hiện một GET
HTTP trên một URL, với một nhóm tham số truy vấn không bắt buộc. Vì chúng ta đang thực hiện yêu cầu GET
, nên chỉ cần truyền tiêu đề uỷ quyền và URL đến curl
. Ví dụ bên dưới sẽ tiếp tục sử dụng Picasa Web Albums Data API và được dùng để truy xuất danh sách các album thuộc sở hữu của người dùng đã xác thực. Xin lưu ý rằng chúng tôi đã rút ngắn mã thông báo uỷ quyền thành ABCDEFG
trong ví dụ này, nhưng bạn nên sử dụng mã thông báo đầy đủ (ví dụ: EUBBIacA
...32JKOuGh
ở trên) thay cho mã thông báo này.
curl --silent --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/feed/api/user/default"
Thao tác này sẽ trả về một blob XML chưa được định dạng:
<?xml version='1.0' encoding='UTF-8'?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:geo='http://www.w3.org/2003/01/geo/wgs84_pos#' xmlns:gml='http://www.opengis.net/gml' xmlns:georss='http://www.georss.org/georss' xmlns:photo='http://www.pheed.com/pheed/' xmlns:media='http://search.yahoo.com/mrss/' xmlns:batch='http://schemas.google.com/gdata/batch' xmlns:gphoto='http://schemas.google.com/photos/2007'><id>http://picasaweb.google.com/data/feed/base/user/brad.gushue</id><updated>2007-09-13T21:30:21.454Z</updated>...</entry></feed>
Có một số công cụ phù hợp để định dạng đầu ra này nhằm giúp con người dễ đọc hơn, bao gồm cả tidy. Cách dễ nhất để sử dụng tidy là chuyển đầu ra từ lệnh curl sang tidy như sau:
curl --silent --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/feed/api/user/default" | tidy -xml -indent -quiet
Điều này giúp nguồn cấp dữ liệu dễ đọc hơn nhiều, chẳng hạn như sau:
<?xml version='1.0' encoding='utf-8'?> <feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:geo='http://www.w3.org/2003/01/geo/wgs84_pos#' xmlns:gml='http://www.opengis.net/gml' xmlns:georss='http://www.georss.org/georss' xmlns:photo='http://www.pheed.com/pheed/' xmlns:media='http://search.yahoo.com/mrss/' xmlns:batch='http://schemas.google.com/gdata/batch' xmlns:gphoto='http://schemas.google.com/photos/2007'> <id>http://picasaweb.google.com/data/feed/api/user/brad.gushue</id> <updated>2007-09-13T21:47:07.337Z</updated> <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/photos/2007#user' /> <title type='text'>brad.gushue</title> <subtitle type='text'></subtitle> <icon> http://lh6.google.com/brad.gushue/AAAAj9zigp4/AAAAAAAAAAA/RiMAlXV4MFI/s64-c/brad.gushue</icon> <link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://picasaweb.google.com/data/feed/api/user/brad.gushue' /> <link rel='alternate' type='text/html' href='http://picasaweb.google.com/brad.gushue' /> <link rel='self' type='application/atom+xml' href='http://picasaweb.google.com/data/feed/api/user/brad.gushue?start-index=1&max-results=1000' /> <author> <name>Brad</name> <uri>http://picasaweb.google.com/brad.gushue</uri> </author> <generator version='1.00' uri='http://picasaweb.google.com/'> Picasaweb</generator> <openSearch:totalResults>8</openSearch:totalResults> <openSearch:startIndex>1</openSearch:startIndex> <openSearch:itemsPerPage>1000</openSearch:itemsPerPage> <gphoto:user>brad.gushue</gphoto:user> <gphoto:nickname>Brad</gphoto:nickname> <gphoto:thumbnail> http://lh6.google.com/brad.gushue/AAAAj9zigp4/AAAAAAAAAAA/RiMAlXV4MFI/s64-c/brad.gushue</gphoto:thumbnail> <entry> <id> http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593</id> <published>2007-05-23T04:55:52.000Z</published> <updated>2007-05-23T04:55:52.000Z</updated> <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/photos/2007#album' /> <title type='text'>Trip To Italy</title> <summary type='text'>This was the recent trip I took to Italy.</summary> <rights type='text'>public</rights> <link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://picasaweb.google.com/data/feed/api/user/brad.gushue/albumid/9810315389720904593' /> <link rel='alternate' type='text/html' href='http://picasaweb.google.com/brad.gushue/TripToItalyV2' /> <link rel='self' type='application/atom+xml' href='http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593' /> <link rel='edit' type='application/atom+xml' href='http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593/123456' /> <author> <name>Brad</name> <uri>http://picasaweb.google.com/brad.gushue</uri> </author> <gphoto:id>9810315389720904593</gphoto:id> <media:group> ... </media:group> </entry> <entry> ... </entry> </feed>
Bạn có thể truy xuất các mục riêng lẻ theo cách tương tự bằng cách cung cấp URL cho mục đó, thay vì URL của nguồn cấp dữ liệu.
Đang cập nhật mục nhập
Các mục trong Google Data API được cập nhật bằng cách thực hiện thao tác HTTP PUT
đối với URL chỉnh sửa bằng một bản sao mới của XML của mục trong nội dung yêu cầu.
- Truy xuất mục nhập bằng giá trị URL
atom:link/@rel='self'
- Cập nhật mục nhập tại địa phương để thực hiện các thay đổi cần thiết
PUT
mục nhập trở lại máy chủ, bằng cách sử dụng giá trị URLatom:link/@rel='edit'
1. Truy xuất mục nhập
Bạn có thể truy xuất mục nhập bằng một trong hai URL được in đậm trong khối nguồn cấp dữ liệu ở trên. URL cần thiết là giá trị href
của phần tử link
có rel='self'
.
curl --silent --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593"
2. Cập nhật mục nhập tại địa phương
Sau khi bạn truy xuất mục nhập, mục nhập đó cần được cập nhật bằng trình chỉnh sửa văn bản hoặc ứng dụng cục bộ để thực hiện mọi thay đổi cần thiết cho mục nhập. Trong lệnh trên để truy xuất một mục, chúng ta không chuyển kết quả đến tidy
như trong các ví dụ trước. Kết quả là XML biểu thị cùng một dữ liệu, nhưng có định dạng khác với phiên bản được chuyển đến tidy
. Để chỉnh sửa một mục theo cách thủ công, việc sử dụng tidy
thường giúp bạn dễ dàng làm việc với XML hơn.
Lưu ý: Vui lòng nhớ thêm tất cả các định nghĩa không gian tên XML được dùng làm thuộc tính cho atom:entry
khi bạn đăng mục nhập mới. Nếu bỏ qua các thông tin này, bạn sẽ gặp phải các trường hợp ngoại lệ khi phân tích cú pháp. Ngoài ra, tidy
sẽ thay thế khoảng trắng giữa các định nghĩa không gian tên bằng các ký tự dòng mới. Mặc dù đây là XML hợp lệ, nhưng các dịch vụ của Google Data hiện không chấp nhận XML này. Nếu bạn đang sử dụng tidy
, hãy nhớ thêm khoảng trống giữa các thuộc tính này trên phần tử entry
.
3. Cập nhật mục nhập trên máy chủ
Khi sử dụng URL edit
, bạn cần PUT
một bản sao của mục nhập vào dịch vụ bằng cURL. Bạn cần thêm một tiêu đề để cho biết loại nội dung đang được gửi đến máy chủ. Đoạn mã sau đây giả định rằng tệp có mục nhập đã cập nhật được lưu trong updated_entry.xml.
curl --silent --data-binary "@updated_entry.xml" --request PUT --header "Content-Type: application/atom+xml" --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593/123456"
Tạo mục
Các mục trong Google Data API được tạo bằng cách thực hiện thao tác HTTP POST
đối với URL bài đăng bằng một mục mới. atom:id
do máy chủ chỉ định, do đó bạn không cần đưa vào các mục mới. Cách dễ nhất để tạo một mục nhập mới là lấy một mục nhập cũ và sửa đổi mục nhập đó. Ví dụ sau đây sẽ thực hiện chính xác điều đó.
- Truy xuất một mục trong mẫu bằng cách sử dụng
atom:link/@rel='self'
- Sửa đổi mục nhập mẫu cục bộ để xoá thông tin không cần thiết và thực hiện các thay đổi cần thiết
POST
mục nhập trở lại máy chủ, sử dụng URLpost
cho nguồn cấp dữ liệu. Giá trị này có trong nguồn cấp dữ liệu đã truy xuất dưới dạng giá trịhref
cho phần tửlink
córel='http://schemas.google.com/g/2005#post'
, hoặc trong tài liệu về dịch vụ trên http://code.google.com.
1. Truy xuất một mục trong mẫu
Bạn có thể truy xuất một mục duy nhất bằng cách sử dụng giá trị href
của một phần tử link
có rel='self'
theo cách tương tự như cách truy xuất một mục trước khi cập nhật mục đó trong ví dụ nêu trên.
curl --silent --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593" | tidy -xml -indent -quiet > template_entry.xml
Sau khi sử dụng tidy
, phản hồi sẽ có dạng như sau:
<entry xmlns='http://www.w3.org/2005/Atom' xmlns:exif='http://schemas.google.com/photos/exif/2007' xmlns:geo='http://www.w3.org/2003/01/geo/wgs84_pos#' xmlns:gml='http://www.opengis.net/gml' xmlns:georss='http://www.georss.org/georss' xmlns:photo='http://www.pheed.com/pheed/' xmlns:media='http://search.yahoo.com/mrss/' xmlns:batch='http://schemas.google.com/gdata/batch' xmlns:gphoto='http://schemas.google.com/photos/2007'> <id> http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389741123981</id> <published>2007-05-23T04:55:52.000Z</published> <updated>2007-05-23T04:55:52.000Z</updated> <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/photos/2007#album' /> <title type='text'>Trip To Italy</title> <summary type='text'>This was the recent trip I took to Italy.</summary> <rights type='text'>public</rights> <link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://picasaweb.google.com/data/feed/api/user/brad.gushue/albumid/9810315389741123981' /> <link rel='alternate' type='text/html' href='http://picasaweb.google.com/brad.gushue/TripToItaly' /> <link rel='self' type='application/atom+xml' href='http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389741123981' /> <link rel='edit' type='application/atom+xml' href='http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389741123981/1179896152905401' /> <author> <name>Brad</name> <uri>http://picasaweb.google.com/brad.gushue</uri> </author> <gphoto:id>9810315389741123981</gphoto:id> <gphoto:name>TripToItaly</gphoto:name> <gphoto:location></gphoto:location> <gphoto:access>public</gphoto:access> <gphoto:timestamp>1179896152000</gphoto:timestamp> <gphoto:numphotos>0</gphoto:numphotos> <gphoto:numphotosremaining>500</gphoto:numphotosremaining> <gphoto:bytesUsed>0</gphoto:bytesUsed> <gphoto:user>brad.gushue</gphoto:user> <gphoto:nickname>Brad</gphoto:nickname> <gphoto:commentingEnabled>true</gphoto:commentingEnabled> <gphoto:commentCount>0</gphoto:commentCount> <media:group> <media:title type='plain'>Trip To Italy</media:title> <media:description type='plain'>This was the recent trip I took to Italy.</media:description> <media:keywords></media:keywords> <media:content url='http://lh5.google.com/brad.gushue/ADFUFKqeA5E/AAAAAAAAABc/V6Sga_Z03WU/TripToItaly.jpg' type='image/jpeg' medium='image' /> <media:thumbnail url='http://lh5.google.com/brad.gushue/ADFUFKqeA5E/AAAAAAAAABc/V6Sga_Z03WU/s160-c/TripToItaly.jpg' height='160' width='160' /> <media:credit>Brad</media:credit> </media:group> </entry>
2. Sửa đổi mục nhập mẫu
Chúng ta muốn tạo một album có tên là "Khúc côn cầu trên băng ở Canada" bằng những bức ảnh trong trận đấu khúc côn cầu trên băng gần đây. Dữ liệu của Google cho phép bạn thả các phần tử Atom mà máy chủ cung cấp giá trị. Vì vậy, để tạo mục nhập mẫu đơn giản này, chúng ta sẽ xoá atom:id
, atom:published
, atom:updated
, atom:author
và nhiều phần tử atom:link
trong nguồn cấp dữ liệu. Thao tác này sẽ cung cấp cho chúng ta một mục nhập mẫu đơn giản. Sau đó, bạn cần sửa đổi mục nhập để thể hiện đĩa nhạc mới mà chúng ta đang tạo:
<entry xmlns='http://www.w3.org/2005/Atom' xmlns:gphoto='http://schemas.google.com/photos/2007'> <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/photos/2007#album' /> <title type='text'>Curling in Canada</title> <summary type='text'>Pictures of all my curling matches in Canada.</summary> <gphoto:location>Canada</gphoto:location> <gphoto:access>public</gphoto:access> <gphoto:commentingEnabled>true</gphoto:commentingEnabled> </entry>
Lưu ý: Vui lòng nhớ thêm tất cả các định nghĩa không gian tên XML được dùng làm thuộc tính cho atom:entry
khi bạn đăng mục nhập mới. Nếu bỏ qua các thông tin này, bạn sẽ gặp phải các trường hợp ngoại lệ khi phân tích cú pháp. Ngoài ra, tidy
sẽ thay thế các khoảng trắng giữa các định nghĩa không gian tên bằng các ký tự dòng mới. Mặc dù đây là XML hợp lệ, nhưng các dịch vụ của Google Data hiện không chấp nhận XML này. Nếu bạn đang sử dụng tidy
, hãy nhớ thêm khoảng trống giữa các thuộc tính này trên phần tử entry
.
3. Đăng mục nhập mới lên máy chủ
Lệnh curl
để đăng một mục mới lên máy chủ rất giống với lệnh cập nhật một mục hiện có, chỉ khác là URL:
curl --silent --request POST --data-binary "@template_entry.xml" --header "Content-Type: application/atom+xml" --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/feed/api/user/brad.gushue" | tidy -xml -indent -quiet
Nếu đăng thành công, kết quả đầu ra XML sẽ là bản sao của mục mới tạo. Mục này sẽ bao gồm những nội dung mà máy chủ đã tạo tại thời điểm mục được tạo, bao gồm cả các giá trị cho các phần tử atom:id
, atom:published
, atom:updated
và atom:link
. Bạn có thể dùng các giá trị link
thu được để chỉnh sửa hoặc xoá mục, miễn là bạn không thực hiện thêm thay đổi nào trong thời gian chờ.
Xoá mục nhập
Việc xoá các mục tương tự như việc cập nhật các mục, ngoại trừ việc bạn dùng phương thức HTTP DELETE
thay vì HTTP PUT
và không cần gửi dữ liệu. Tương tự như yêu cầu cập nhật, URL edit
được dùng làm mục tiêu của yêu cầu HTTP.
curl --silent --request DELETE --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593/123456"
Tải các đối tượng nghe nhìn lên
Một tính năng quan trọng của Picasa Web Albums Data API và Documents List Data API là khả năng tải các đối tượng nhị phân lên. cURL có thể dễ dàng hoàn thành việc tải dữ liệu nhị phân và tiêu đề slug lên. Tuy nhiên, Documents List Data API hiện yêu cầu đăng XML cùng với dữ liệu nhị phân dưới dạng thông báo MIME nhiều phần. Việc tạo thông báo gồm nhiều phần nằm ngoài phạm vi của bài viết này.
Ví dụ dưới đây minh hoạ cách tải một bức ảnh có tên sweeping_the_rock.png
lên một Album Web Picasa có tiêu đề "Sweeping the rock" (Quét đá):
curl --silent --request POST --data-binary "@sweeping_the_rock.png" --header "Slug: Sweeping the rock" --header "Content-Type: image/png" --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/feed/api/user/brad.gushue/albumid/5113621341847124417" | tidy -xml -indent -quiet
Các công cụ dòng lệnh khác
Một số nhà phát triển thích học hoặc gỡ lỗi bằng các công cụ dòng lệnh khác.
Các công cụ phổ biến bao gồm:
- telnet, openssl được dùng để tạo các kết nối socket thô (văn bản thuần tuý và dựa trên SSL, tương ứng) đến các máy chủ web và có thể dùng để tương tác với các dịch vụ dữ liệu của Google. Xin lưu ý rằng không phải dịch vụ nào của Google Data cũng hỗ trợ SSL. Sau đây là cách mở các mối kết nối:
telnet picasaweb.google.com 80
(Picasa Web Albums Data API)openssl s_client -connect www.google.com:443
(API dữ liệu Lịch Google và các dịch vụ khác trên www.google.com)
Khi gửi dữ liệu HTTP thô, hãy lưu ý rằng các thao tácPOST /data/feed/api/user/brad.gushue HTTP/1.1 Host: picasaweb.google.com Authorization: GoogleLogin auth=ABCDEFG Content-Length: 493 <entry xmlns='http://www.w3.org/2005/Atom' xmlns:gphoto='http://schemas.google.com/photos/2007'> <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/photos/2007#album' /> <title type='text'>Curling in Canada</title> <summary type='text'>Pictures of all my curling matches in Canada.</summary> <gphoto:location>Canada</gphoto:location> <gphoto:access>public</gphoto:access> <gphoto:commentingEnabled>true</gphoto:commentingEnabled> </entry>
POST
vàPUT
sẽ yêu cầu tính toán giá trị cho tiêu đềContent-Length
. Bạn có thể dùng công cụwc
của UNIX để tính toán giá trị này. Đặt tất cả nội dung của phần nội dung HTTP vào một tệp văn bản, chẳng hạn nhưtemplate_entry.xml
(ví dụ được dùng ở trên) và chạywc -c template_entry.xml
. Thường rất khó gỡ lỗi nếu bạn vô tình sử dụng giá trị không chính xác cho tiêu đềContent-Length
. - wget thường được dùng để tải dữ liệu từ một máy chủ web xuống một tệp cục bộ. Tuy nhiên,
wget
có nhiều lựa chọn giúp nó có khả năng thực hiện tất cả các loại yêu cầu cần thiết để tương tác với các dịch vụ dữ liệu của Google. Sau đây là ví dụ về cách sử dụngwget
đểPOST
một mục album mới vào Album Web Picasa:wget --post-file template_entry.xml --header "Authorization: GoogleLogin auth=ABCDEFG" --header "Content-Type: application/atom+xml" "http://picasaweb.google.com/data/feed/api/user/brad.gushue"
- xsltproc là một công cụ để áp dụng các phép biến đổi XSL (XSLT) cho tài liệu XML. Bạn có thể dùng thư viện này để dễ dàng trích xuất các phần dữ liệu mong muốn từ một mục hoặc nguồn cấp dữ liệu XML do Google Data API trả về, hoặc để tạo các mục mới hoặc đã cập nhật.
Kết luận
Như bạn đã thấy, bạn có thể sử dụng cURL và một số công cụ dòng lệnh khác để dễ dàng tương tác với các dịch vụ dữ liệu của Google bằng cách sử dụng XML thô và HTTP. Vui lòng tham gia diễn đàn dành riêng cho API nếu bạn có thắc mắc về cách sử dụng các công cụ này với Google Data API mà bạn yêu thích.