unhurried

コンピュータ関連ネタがほとんど、ときどき趣味も…

Google Cloud Print APIを使った印刷手順

最近はどのプリンターもインターネットに繫がっているのが当たり前になって来ています。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}}}

参考