このブログはURLが変更になりました

新しいブログはこちら→ https://matsuu.hatenablog.com/

CUPS(CUPS-PDF)とネットプリントサービスの夢のコラボ

セブンイレブンのネットプリントサービスが便利。
PDFや画像をWebでアップすれば、全国のセブンイレブン(一部店舗除く)で印刷ができる。
自宅にプリンターがないとか、出張先でちょっと印刷したいとかで便利。
もちろんセブンイレブンが近くあることが前提条件ですが。

で、これをLinuxのCUPSからシームレスに連携してみた。つまり、

  1. Linuxで普通に印刷する
  2. メールで「プリント予約番号」が通知される
  3. セブンイレブンに設置されているプリンターDocuCentre Color f450 MPで通知された「プリント予約番号」を入力する
  4. 綺麗に印刷される

仕組みは、CUPS-PDFでPDFを出力して、出力されたファイルを定期的に監視して、curlでWebのフォームにPDFを投げつけるだけ。

Gentooであれば、cups-pdfとcurlをインストールする。

# emerge cups-pdf curl

で、定期的に監視してcurlで投げるプログラムはこちら。

#!/bin/sh
#
# http://www.printing.ne.jp/
#

# ユーザーID
i="XXXXXXXX"

# パスワード
p="XXXXXXXX"

# カラーモード 1:プリント時に選択 2:カラー 0:白黒
color=1

# 予約番号タイプ 0:英数字 1:数字のみ
number=0

# 暗証番号 0:設定しない 1:設定する(半角数字4桁まで)
secretcodesw=0
#secretcode="1234"

# 登録結果通知 0:通知しない 1:通知する(260文字まで)
mailsw=1
mailaddr="[email protected]"

# 新規ファイルの登録
spooldir="/var/spool/cups-pdf/${USER}"

################################################################################

url="https://www.printing.ne.jp/cgi-bin/mn.cgi"

session=`curl -F i=${i} -F p=${p} ${url} 2>/dev/null | sed 's/\r/\n/g' | grep '^<input type="hidden" name="s"' | sed 's/^.*name="s" value="\([^"]*\)".*$/\1/'`
args="-F s=${session} -F c=0 -F m=2 -F color=${color} -F number=${number} -F secretcodesw=${secretcodesw} -F secretcode=${secretcode} -F mailsw=${mailsw} -F mailaddr=${mailaddr}"

for file in `ls ${spooldir}` ; do
        curl ${args} -F "file1=@${spooldir}/${file};filename=`date +'%Y%m%d%H%M%S_'`${file}" ${url} >/dev/null 2>&1
        rm ${spooldir}/${file}
        sleep 1
done

ユーザーIDとパスワードとメールアドレスを変えるだけでとりあえずは良いだろう。
ユーザーIDとパスワードはhttp://www.printing.ne.jp/で会員登録する。無料。

とりあえず動いたが、改善すべき点が沢山ある。

  • シェルスクリプトに書き込む設定項目をCUPS(PPD)で定義できないか
  • Webフォームに投げた際のエラー処理未実装
  • Webフォームの構成が変わると対応できない
  • エラー処理が実装できてない現状で最後にファイルを消すのはちょっと無謀
  • その他諸々

まぁそのうち考えますよ。

最初はPlaggerで試そうかと思ったが、Gentooのg-cpanでPlaggerがインストールできなかったので諦めたのは公然の秘密。