PythonでRSSの新着チェック(feedparser/sqlite3)

rss_cron.pyを実行すると5分おきにrss_print.pyが実行される。

rss_cron.py

from apscheduler.schedulers.blocking import BlockingScheduler
import os

sched = BlockingScheduler()


@sched.scheduled_job('interval', minutes=5)
def timed_job():

    os.system('python rss_print.py')


sched.start()

rss_print.py

import datetime
import sqlite3

import feedparser
import pytz


class SqliteDB:
    def __init__(self):

        self.db_connect = sqlite3.connect('rss.sqlite')
        self.db_connect.row_factory = sqlite3.Row

        self.db_cursor = self.db_connect.cursor()

        self.db_cursor.execute(
            "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='RSSEntries';"
        )

        if self.db_cursor.fetchone()[0] == 0:

            self.db_flag = True

            # テーブル新規作成
            self.db_cursor.execute(
                'CREATE TABLE RSSEntries (entry_id INTEGER PRIMARY KEY AUTOINCREMENT, title, link, published)'
            )
        else:
            self.db_flag = False

    def execute(self, url):

        feedparser.USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko'
        fdp = feedparser.parse(url)

        for entry in fdp.entries:

            # リンクの重複チェック
            self.db_cursor.execute(
                'SELECT COUNT(*) from RSSEntries WHERE link=?', (entry.link, ))


            # 重複がないまたはテーブルが新規の場合
            if self.db_cursor.fetchone()[0] == 0 or self.db_flag:

                # データーベースに追加
                if 'published_parsed' in entry.keys():
                    pubdate = pytz.timezone('Asia/Tokyo').localize(
                        datetime.datetime(*entry.published_parsed[:6]))

                elif 'updated_parsed' in entry.keys():
                    pubdate = pytz.timezone('Asia/Tokyo').localize(
                        datetime.datetime(*entry.updated_parsed[:6]))
                else:
                    pubdate = datetime.datetime.now()

                self.db_cursor.execute(
                    'INSERT INTO RSSEntries (title, link, published) VALUES (?,?,?)',
                    (entry.title, entry.link, pubdate))

                self.db_connect.commit()

                # テーブルが新規の場合は表示しない
                if not self.db_flag:

                    print(entry.title, entry.link)

    def close(self):
        self.db_connect.close()


if __name__ == '__main__':
    database = SqliteDB()
    database.execute('http://imabari.jpn.org/sc/imabari-urge.cgi')
    database.execute('http://imabari.jpn.org/sc/imabari-shelter.cgi')
    database.close()

ウイルスバスター クラウドの Windows 10 Fall Creators Updateでブルースクリーン

ウイルスバスター クラウドの Windows 10 Fall Creators Update (RS3) の対応状況について | サポート Q&A:トレンドマイクロ

ウイルスバスター クラウドが入っている状態でKB4043961をインストールするとpage_fault_in_nonpaged_areaでブルースクリーン

KB4043961が入っている状態でウイルスバスター クラウドをインストールすると途中で止まる

これのおかげで半日潰れた

ubuntuのPDFBOXでPNG変換するとファイルサイズが大きい

PDFファイル

http://www.city.imabari.ehime.jp/kouhou/koho/201710/kyukyu.pdf

PDFのサイズは927,664バイト

PDFBOX

http://ftp.kddilabs.jp/infosystems/apache/pdfbox/2.0.7/pdfbox-app-2.0.7.jar

最新の2.07

コマンド

# PNG
java -jar pdfbox.jar PDFToImage -imageType png -dpi 200 kyukyu.pdf

# JPEG
java -jar pdfbox.jar PDFToImage -dpi 200 kyukyu.pdf

結果

JPEG PNG
Windows 1,988,972 653,172
Ubuntu 1,985,029 11,554,700

5MBを超えるのでTwitterで投稿できない

http://imaya.github.io/png.identify/

でファイルを見るとubuntuはZLIB BlocksがplainでWindowsはDynamicなので圧縮されていないみたい

解決

java9を入れていたようでjava8にしたらサイズが小さくなりました。

Twitterでマルチメディア投稿

import datetime
import os
import shlex
import subprocess

import requests
import twitter

# 今月
now = datetime.datetime.now()

# 来月
# now = datetime.datetime.now() + datetime.timedelta(days=28)

# URL作成
url = 'http://www.city.imabari.ehime.jp/kouhou/koho/{0}{1}/kyukyu.pdf'.format(
    now.year, now.month)

# ファイル名作成
filename = os.path.basename(url)

# ダウンロード
res = requests.get(url)

if res.status_code == requests.codes.ok:

    # ファイル保存
    with open(filename, 'wb') as fw:
        fw.write(res.content)

    # PDFファイルをPNGイメージに変換
    cmd = 'java -jar pdfbox.jar PDFToImage -imageType png -dpi 200 kyukyu.pdf'
    args = shlex.split(cmd)
    p = subprocess.Popen(args)

    p.wait()

    twit = '{0}月の救急病院などの当直表 #imabari\n{1}'.format(now.month, url)

    with open('kyukyu1.png', 'rb') as fr:

        api = twitter.Api(
            consumer_key='',
            consumer_secret='',
            access_token_key='',
            access_token_secret='')

        status = api.PostUpdate(twit, media=fr)

Raspbian stretchにphantomjsをインストール

makezine.jp

# ユーザー追加・pi削除
sudo /usr/sbin/useradd --groups sudo -m username
sudo passwd username
sudo passwd root
sudo passwd --lock pi

# phantomjsをインストール
wget https://github.com/piksel/phantomjs-raspberrypi/releases/download/v2.1.1-s/phantomjs-armv6-stretch-v2.1.1.tar.xz
tar Jxvf phantomjs-armv6-stretch-v2.1.1.tar.xz
chmod a+x ./phantomjs
sudo cp ./phantomjs /usr/local/bin/
sudo apt install fontconfig-config fonts-dejavu-core libfontconfig1

sudo apt install python3-bs4
sudo -H pip3 install python-twitter
sudo -H pip3 install selenium
 
# sudo apt install selenium
# 上記でインストールするとPhantomjsもインストールされるが
# phantomjsを起動するとQXcbConnection: Could not connect to displayが表示され中止になる
# デスクトップではないので

カスペルスキー セキュリティ 2018

https://support.kaspersky.co.jp/12605?cid=dl_klsupport

f:id:imabari_ehime:20171011225824p:plain

最新のカスペルスキー セキュリティ 2018 に含まれる各プログラムのダウンロード提供及びライセンスの販売は、2017年10月12日10:00頃の開始を予定しています。

Tomarigi(校正・推敲支援ツール)のインストール

Tomarigi

http://www.pawel.jp/outline_of_tools/tomarigi/

ダウンロード

http://www.pawel.jp/download/tomarigi/

MeCab

http://taku910.github.io/mecab/#download

ダウンロード

https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7UDg1QnF5WHJ0QVE

CaboCha

http://taku910.github.io/cabocha/

ダウンロード

https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7WElGUGt6ejlpVXc