LoginSignup
2
2

More than 1 year has passed since last update.

PythonからEpsonプリンタを使うためのライブラリ"pyson_connect"を作成した話

Last updated at Posted at 2022-01-21

お知らせ?

pyson_connectを利用して開発しているプラットフォームの事例として、セイコーエプソン株式会社様のDXイノベーションサイトに掲載されました!!!!

とつぜんですがPythonを書いているそこのあなた!!!

なんとなくPythonからプリンタを操作したいなって思うときありませんか?ありますよね?僕はあります。

シチュエーション的には......

  • コマンドラインから印刷かけたいとき
  • webサービスに組み込みたいとき
  • ラズパイで使えるようにしたい
  • 機械学習で使う

......などなど一見ニッチな需要に思えるけど痒いところに手が届かない人は多いのではないのでしょうか。

Epsonには"Epson Connect"という便利なサービスがあり、さらに、プリンタを遠隔で操作するためのRestful APIが公式で準備されているのでそちらを使うことによってPythonからプリンタを操作できるようになります。

つまり......
プリンタードライバー自作できるのです!!!

しかし......

Restful APIと日本語ドキュメントがあって実装しやすい反面、毎回api実装するのがまあまあ面倒なのでライブラリ化してみました。

非公式のものなので使用は自己責任でお願いします。

そもそもEpson Connectとは

Epson Connect は、インターネットを通じてお客様とエプソンプリンター、スキャナーとを結ぶサービスです。「メールプリント」など、いつでも・どこからでも印刷できる便利な各種サービスを提供しています。

(https://www.epsonconnect.com/ より引用)

とのことで昨年終了してしまったクラウドプリントの代替手段としても使えそう。

サービスを利用するには

今回はEpson Connect自体の登録方法は解説しませんが、以下のサイトでユーザ登録及びプリンタを登録する必要があります。
Epson Connectの登録はこちらから

Epson ConnectをPythonから使ってみよう

Epson ConnectをPythonから使用するには、上記の登録の他にEpson Connectの開発者登録を行い、ライセンス申請をする必要があります。

Epson Connectのデベロッパーに登録する

ユーザーアカウントの登録

  1. まずはこちらから新規登録を行います。
    スクリーンショット 2021-12-13 21.23.35.png

  2. 続いて作成するアカウントのタイプを選択します。今回は個人的な利用を想定しているので個人用アカウントを選択します。スクリーンショット 2021-12-13 21.25.44.png

  3. 画面の指示に従い必要事項を入力し、完了するとメールが届くのでメール内のリンクを踏んでアカウントの登録は完了です。
    スクリーンショット 2021-12-13 21.26.45.png

ライセンス申請を行う

  1. まずはライセンス申請をクリックします。 スクリーンショット 2021-12-13 21.28.34.png
  2. 必要事項を記入します。 スクリーンショット 2021-12-13 21.34.40.png アプリケーションの概要は「Pythonスクリプトの作成」などでも良いと思います。 ちなみに、 APIのドキュメントによると、

1 分間あたりの API 呼び出し回数を 100 回に制限します。リクエスト回数はクライアント ID 単位でカウントしま す。1 分間あたり 100 回の API 呼び出しで、目安として 20 回の印刷が可能です。
※2021/2/5 までに発行したライセンスは、1 時間あたりの API 呼び出し回数が 10,000 回に制限されています。 ※以下の API は API 呼び出し回数に含まれません。
・ 認証 API
・ アクセストークン再発行 API
・ 印刷ファイルアップロード API

とのことなので、このことは考慮に入れておきましょう。
3. 記入から数日後にメールにて認証情報が届くので各自控えておきましょう。

Pythonから印刷を実行してみる

ライブラリを使用し、実際に印刷するには以下の手順を行います。

ライブラリのインストール

まずはpipからインストール

pip install pyson-connect

クライアントキーなどを環境変数に追加

ソースコードに直接書いても良いのですが、うっかり流出すると大変なことになるので環境変数に登録します。以下の変数名にするとライブラリが勝手に呼び出してくれます。

export epsonClientID=クライアントID
export epsonClientSecret=クライアントシークレット

印刷実行のサンプルコード

import pyson_connect


class printer:
    def __init__(self, epson_email):
        self.pc = pyson_connect.PysonConnect()
        # 認証関数の実行
        auth = self.pc.authentification(epson_email)


    def settings(self, setting_data):
        # 印刷設定関数の実行
        settings = self.pc.print_setting(setting_data)


    def file_upload(self, file_path, document_type):
        # ファイルアップロード関数の実行
        self.pc.upload_print_file(file_path, document_type)


    def printing(self):
        # 印刷実行関数の実行
        self.pc.excute_print()


if __name__ == "__main__":
    email = input("input EpsonConnect Email: ")
    p = printer(email)
    # 印刷タイプ
    # ドキュメントを印刷する場合:document
    # 写真を印刷する場合:photo
    document_type = input("input document_type(document/photo): ")
    # 印刷設定(この場合はEpson Connectが定義したデフォルト設定で印刷される。)
    # 用紙の設定や給紙トレイの場所の指定、カラーやモノクロなどの詳しい指定方法はライブラリのドキュメントを参照。
    p.settings({"job_name":"demo", "print_mode":document_type})
    # 印刷したいファイルをアップロード
    file_path = input("input filePath: ")
    p.file_upload(file_path, document_type)
    # 印刷実行
    p.printing()

なお、「印刷能力取得」と呼ばれる、印刷を実行したいプリンタでどの用紙が使えて、給紙トレイがどこにあるか、両面印刷が可能かどうかなどを取得する関数があるのですが今回は省略しています。より詳細な印刷設定を行う際は一度実行し、確認しておくことをお勧めします。

ライブラリの詳しい使い方はこちらをご覧ください。

最後に

スキャン機能もライブラリから利用することができますが、その使い方などはまた機会があればご紹介します。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2