2017年07月19日

とりあえずブログカードを自分で生成してみた

WordPressやはてな等でよく見る「ブログカード」があります。多分↓な感じなものだと思うのですが……
BLOG開始の自己紹介がてら半年に1度作成しているリスク資産状況です。...
で、このブログは「さくらのブログ」で作成しているのですが、「さくらのブログ」でのブログカードの作成方法が分からなかったため、今まで他のサイトの方のhtmlタグを参考にしながらタグを書いていました。

とは言っても、これだと非効率なのでリンクを入力すると自分用のブログカードを作成してくれるスクリプトをPythonで作成してみました。(画像は熊の絵で固定ですが……)

どんなものかと言うと・・・

Textのフォームにブログカードを作成したいLinkを記入して「作成」のボタンを押すと
20170719_python_0.jpg

下記の様なリンクカードを生成します。
20170719_python_1.jpg
あとは上記のタグを張り付ける形になります。見ての通りですがlocalhostでのCGIで実施しています。

備忘録代わりのソースコードは下記となります。

ソースコード

#!/usr/bin/env python3
################################################################
# blog記事を引用する
# Usage : CGI
#
import cgi
import os
import re
import requests
import bs4

print("Content-Type: text/html; charset=utf-8")
print("")

form = cgi.FieldStorage()
if(not 'blogLink' in form):
# blogリンク入力画面
print("""
<form>
<textarea name="blogLink" rows="20" cols="120">ここに引用するblog記事のURLを張り付けてください</textarea><br>
<input type="submit" value="作成">
</form>
""")
else:
# blogリンク出力画面
blogLink = form.getvalue("blogLink","0")
blogRes = requests.get(blogLink)
blogSoup = bs4.BeautifulSoup(blogRes.text,"lxml")
# 記事のタイトルはtitleで検索
blogTitle = blogSoup.select_one('title').string
# 記事の本文はdivタグをもってくる。最初は文章から始まる前提。40文字を出力する
blogText = ""
for text in blogSoup.select_one('.text > div'):
# 最短マッチングのために<.*?>を使ってtagを削除する
textSub = re.sub("<.*?>","",str(text))
blogText += str(textSub)
blogTextSlice = blogText[0:40] + "..."

# メインの出力処理
print("<div class=\"blog-card internal-blog-card blog-card-thumbnail-left cf\" style=\"margin: 20px 0px; max-width: 100%; padding: 12px 12px 6px; width: 500px; position: relative; clear: both; min-height: 145px; min-width: 300px; box-sizing: border-box; border: 1px solid #dddddd; word-wrap: break-word; border-radius: 5px; font-family: 'Hiragino Kaku Gothic ProN', Meiryo, sans-serif; font-size: 16px;\">")
print("<div class=\"blog-card-thumbnail\" style=\"float: left;\"><a class=\"blog-card-thumbnail-link\" style=\"color: #2098a8; word-wrap: break-word;\" href=\"" + blogLink + "\"><img class=\"blog-card-thumb-image wp-post-image\" style=\"border: 0px; max-width: 100\%; height: 100px; width: 100px; object-fit: cover; display: block; margin-bottom: 10px;\" src=\"http://kumanabe.sakura.ne.jp/sblo_files/kumanabe/image/kumaIcon_100x100-29165-thumbnail2.png\" width=\"100\" height=\"100\" /></a></div>")
print("<div class=\"blog-card-content\" style=\"margin-left: 110px; line-height: 19.2px; margin-bottom: 0.5em;\">")
print("<div class=\"blog-card-title\" style=\"margin-bottom: 5px;\"><a class=\"blog-card-title-link\" style=\"color: #111111; word-wrap: break-word; font-weight: bold; text-decoration-line: none;\" href=\"" + blogLink + "\">" + blogTitle + " </a></div>")
print("<div class=\"blog-card-excerpt\" style=\"color: #333333; font-size: 0.9em; max-height: 80px; overflow: hidden;\">" + blogTextSlice + r"</div>")
print("</div>")
print("</div>")

参考書


CGI周りは「実践力を身につける Pythonの教科書」を参考にして作成しました。というか下記のAmazonへのリンクも似たような感じでlocalhostからのCGIで作成してみました。

実践力を身につける Pythonの教科書

  • 単行本(ソフトカバー)
  • – 2016/10/26
  • クジラ飛行机 (著)





スポンサーリンク
posted by くまなべ at 21:07 | Comment(0) | TrackBack(0) | Python
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/180381096
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック