1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

tabura-pyをHeroku上で利用する

Last updated at Posted at 2021-03-21

##1.Google Colaboratoryでtabura-pyを利用する
tabura-pyは、taburaというpdfを読み込み操作するためのJava製モジュール(tabura-java)をPythonで利用するためのライブラリで、例えば地方自治体や政府系のオープンデータ(注:pdfで公開されている)をPythonでpdfファイルに載っている数値や項目を読み込みたい際にPythonなどでtabura-pyを利用すると良いかと思われる。

例えば東京都福祉保健局が、毎日15:00にHPで発表している、新型コロナ感染症(covid-19)の今日の東京都での新規感染者数(速報)のpdfファイルを、tabura-pyで読み込んでPythonで操作したいといった場合、以下のようなPythonスクリプトを生成することで、pdfにある感染者数(速報値)を抽出することができる。

colab.py

!pip install tabula-py

from tabula import read_pdf
wmd = '030320'
url = 'https://www.fukushihoken.metro.tokyo.lg.jp/index.files/{0}sokuhou.pdf'.format(wmd )

tbls = read_pdf( url ,pages=1)
x =  tbls[0]['Unnamed: 0'][3]
txt ='[{0}_東京都] 新規感染者数_速報値:{1}'.format(wmd , x)
print(txt)  

注:Google Colaboratory上でtabura-pyを利用

image.png

余談だが、東京都福祉保健局がHP上に発表しているpdfファイルの名前の命名規則が和暦利用(令和3年)というのが、なんとも「しょっぱい」というかトホホな感じではあるが...(汗
(せめて西暦でファイル名を生成して欲しかった。というよりもそれ以前にpdfファイルではなく、txtファイルやcsvファイル、json形式などでオープンデータを公表していただけるのが一番手取り早いんすけどね...)
image.png

##2.Herokuでtabura-pyを利用する
tabura-pyはtabura-javaのラッパーライブラリで、普通にtabura-pyを使ったPythonスクリプトをHerokuの環境にpushしてスクリプトを実行すると、以下のようなエラー(Javaのモジュールがないうんぬん)が出る。

Еrror: tabula.errors.JavaNotFoundError: "java" command is not found from this Python process.Please ensure Java is installed and PATH is set for "java"

解決方法としては、以下のstackoverflowの投稿を参照。
色々調べたり試行錯誤をしたが、このstackoverflowの投稿がすべてを語ってましたです(汗

※参考↓
https://stackoverflow.com/questions/58548093/java-not-found-when-i-try-to-read-a-pdf-file-using-the-tabula-library

解決方法としては要約すると、HerokuのbuildpackにJavaを追加して、pythonとJavaの2つ構成にした上で、アプリ(Heroku上にpushするモジュール群)の中に、pom.xmlを作成してHerokuにpushし直すと上記のエラーは解消され、tabura-pyがHeroku上で利用できるようになる。

2-1.HerokuのBuildpackにJavaを追加する

Herokuのbuildpacksの構成を、Java[1]とpython[2]の2つを登録する。なおheroku buildpacksで現在のBuildpackの状況を確認できる。

heroku buildpacks:set heroku/python
heroku buildpacks:add --index 1 heroku/java

heroku buildpacks

2-2.pom.xmlファイルの作成

pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <version>1.0-SNAPSHOT</version>
    <artifactId>helloworld</artifactId>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>3.0.1</version>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals><goal>copy-dependencies</goal></goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

pom.xmlについては、Herokuが提供しているドキュメント「Deploying Java Apps on Heroku」にある説明を参照。1行目の<?xml version="1.0" encoding="UTF-8"?>の箇所と、中段の<dependencies>...</dependencies>の箇所は削除して、pom.xmlを作成すればOK。

※参考↓
https://devcenter.heroku.com/articles/deploying-java#verify-that-your-pom-xml-file-is-set-up-correctly

##3.Herokuでtabura-pyを利用する便益
ちなみにお昼のTVのワイドショーで、15時に東京都の新型コロナ感染症の新規感染者数の速報のテロップが流れるのは、ソース元は、東京都保健衛生局HPに15時に公開されるpdfファイルであります。
image.png

なので上記のtabura-pyを使って東京都保健衛生局HPのpdfファイルを読むpythonスクリプトをHerokuで毎日15時数分に実行(Heroku schedulerを利用)して、それをGooge hangout chatの任意のチャットルームのスレッドに投稿するようにしてあげると、「(在宅勤務中に)3時にTVを付けてゴゴスマを見る(そして数字を確認した後にテレビを消す)」という不毛な?作業からは開放されることになります(笑

##4.余談
東京都福祉保健局は、本日の新型コロナ感染症の新規感染者数の速報値を、twitterでも配信しているので、そちらを閲覧するというのもありです。
image.png

(わざわざtabura-pyで数字を読み込むPythonスクリプトを作らなくても、例えばIFTTTなどで東京都保健衛生局のアカウントをフォローして、15時の新規感染者数の速報値を伝えるツイートを捕捉するのも手なのかなと...)

1
2
1

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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?