2024-11-16
タンザニアのためのコード、Code for Tanzania!

タンザニアでもらったレシートすべてにQRコードが!


アクセスするとレシートの内容がウェブで見えます。
運営しているのは、タンザニア政府の税務機関、Tanzania Revenue Authority
HTMLでしか取得できず、APIもなさそうなので、JSONで取得できるようにレッツ、シビックテック!


「Tanzania Receipt QR Reader」
src on GitHub
リシートのQRコードを読み込ませるとHTMLをJSON化して取得し、日本円またはドル表示付きで表示するウェブアプリです。 タンザニアのレキートを持っていない方は、DEMOモードでどうぞ!

レシートにシークレットとして時間分秒がついているものと、ついていないものがありました。
Cookieを使ってレシート取得ページへアクセスします。 fetchReceipt.js import { getCookie } from "./getCookie.js"; export const fetchReceipt = async (receiptVerificationCode) => { const n = receiptVerificationCode.indexOf("_"); if (n < 0) throw new Error("needs _hhmmss"); const vcode = receiptVerificationCode.substring(0, n); const s = receiptVerificationCode.substring(n + 1); const hms = s.substring(0, 2) + ":" + s.substring(2, 4) + ":" + s.substring(4, 6); //const hms = "21:20:46"; const baseurl = "https://verify.tra.go.tz/"; const url = baseurl + vcode; const res = await fetch(url); //console.log(res.headers); const options = { headers: { "Cookie": getCookie(res, "ASP.NET_SessionId") } }; //console.log(options); const res2 = await fetch(baseurl + "Verify/Verified?Secret=" + hms, options) const html = await res2.text(); return html; }; 取得したHTMLからJSON化するコードは parseReceipt.js です。

CORS設定されておらず、ブラウザから直接アクセスはできなかったので、下記のようにサーバーアプリケーションを作って、API呼び出しで使えるようにします。 import { fetchWeb } from "https://code4fukui.github.io/wsutil/fetchWeb.js"; import { getReceipt } from "./getReceipt.js"; export default fetchWeb(async (param, req, path, conninfo) => { //console.log("param", param); return await getReceipt(param); }); サーバーに設定してできあがり!(参考、README.md#setup


こちらがタンザニアのスーパー


名産、ナッツを買いました


タンザニアのナッツ、今月のサイフラに持っていきます!


「CyberFriday - 2024-11-29」

福井市のカフェ、ヨリバにて開催!

Tweet
クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS