最近はどのプリンターもインターネットに繫がっているのが当たり前になって来ています。Webサービスを作るときにバックグラウンドでプリンターに印刷ジョブを投げれたらいいなというケースがいくつかあったので、その手段の一つとしてGoogle Cloud Print APIを調べてみました。
Google Cloud Print APIを使ってWebページを印刷する手順
(0) Google API ConsoleでクライアントIDとクライアントシークレットを取得する
(1) 認可画面を出力し、ユーザーから認可をもらう
https://accounts.google.com/o/oauth2/v2/auth?
redirect_uri={登録したリダイレクトURI}&
response_type=code&
client_id={発行されたクライアントID}&
scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloudprint&
access_type=offline
(2) リダイレクトURIにて認可コードを受信し、アクセストークンを取得する
- リダイレクトURIのcodeパラメータに認可コードが付与されてリダイレクトされて来ます。
- URIから取得した認可コードをToken Endpointに送信し、アクセストークンを取得します。
リクエスト
POST https://www.googleapis.com/oauth2/v4/token
Content-Type: application/x-www-form-urlencoded
code={認可コード}&
client_id={発行されたクライアントID}&
client_secret={発行されたクライアントシークレット}&
redirect_uri={登録したリダイレクトURI}&
grant_type=authorization_code
レスポンス
{
"access_token": {アクセストークン},
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": {リフレッシュトークン}
}
(3) プリンター検索APIを呼び出し、印刷したいプリンタのプリンタIDを取得する
リクエスト
GET https://www.google.com/cloudprint/search
Authorization: OAuth {アクセストークン}
レスポンス
{
"printers": [
{
"id": {プリンタID},
"displayName": {プリンタの表示名},
...
}]
...
}
(4) プリンタジョブ送信APIを呼び出し、印刷を実行する
- 例)URLを指定してそのWebページを印刷するリクエスト
POST https://www.google.com/cloudprint/submit
Content-Type: application/x-www-form-urlencoded
printerId={プリンタID}&
title={印刷タイトル}&
contentType=url&
content={印刷するURL}&
ticket={チケットオブジェクト}
- チケットオブジェクトはカラー、部数などの印刷オプションを指定するためのオブジェクトです。
{"version":"1.0","print":{"vendor_ticket_item":[],"color":{"type":"STANDARD_MONOCHROME"},"copies":{"copies":1}}}
参考