最近はどのプリンターもインターネットに繫がっているのが当たり前になって来ています。Webサービスを作るときにバックグラウンドでプリンターに印刷ジョブを投げれたらいいなというケースがいくつかあったので、その手段の一つとしてGoogle Cloud Print APIを調べてみました。
Google Cloud Print APIを使ってWebページを印刷する手順
(0) Google API ConsoleでクライアントIDとクライアントシークレットを取得する
(1) 認可画面を出力し、ユーザーから認可をもらう
- スコープには「https://www.googleapis.com/auth/cloudprint」を指定すればよいです。
- 認可画面URLはこのような形式です。
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にて認可コードを受信し、アクセストークンを取得する
リクエスト 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={チケットオブジェクト}
- チケットオブジェクトはカラー、部数などの印刷オプションを指定するためのオブジェクトです。
- 参考:https://developers.google.com/cloud-print/docs/cdd#cjt
- 例)モノクロで一部印刷する
{"version":"1.0","print":{"vendor_ticket_item":[],"color":{"type":"STANDARD_MONOCHROME"},"copies":{"copies":1}}}