Shizuoka.pyお疲れ様でした、想定以上のヒトに参加していただいて感謝しております。特に今までお会いしたことのなかった静岡のPythonistaにお会いできて満足です。
それからpygamessユーザーとお話できたのも嬉しかったです(あまり製薬業界以外で使われているとは思わなかったので)。
また、懇親会で良い感じの場所を提供していただいたphotoにも感謝!
python-pptxでつくったスライドのソースを張っておきます。水着ループはたった 4 行のコードでひたすらアイドル水着画像をあつめる(Python だよ)を参考にしました。
#!/usr/bin/env python
# -*- encoding:utf-8 -*-
from pptx import Presentation
from pptx.util import Inches, Px
import re
import requests
prs = Presentation()
title_slidelayout = prs.slidelayouts[0]
bullet_slidelayout = prs.slidelayouts[1]
shapes = prs.slides.add_slide(title_slidelayout).shapes
shapes.title.text = 'Pythonでpptx'
shapes.placeholders[0].text = 'Pythonでpptx'
shapes.placeholders[1].text = '@kzfm'
shapes = prs.slides.add_slide(bullet_slidelayout).shapes
shapes.placeholders[0].text = 'GUIに頼らずpptxを作れると素敵'
tf = shapes.placeholders[1].textframe
tf.text = 'パターンの再利用'
tf.add_paragraph().text = '作業の自動化'
tf.add_paragraph().text = 'Sphinxに慣れすぎた'
tf.add_paragraph().text = 'powepointたまに死ぬ(->発狂する)'
shapes = prs.slides.add_slide(bullet_slidelayout).shapes
shapes.placeholders[0].text = 'python-pptx'
tf = shapes.placeholders[1].textframe
tf.text = 'https://github.com/scanny/python-pptx'
tf.add_paragraph().text = 'pip install python-pptx'
tf.add_paragraph().text = '開発はじまったばかり'
tf.add_paragraph().text = '超期待!'
shapes = prs.slides.add_slide(bullet_slidelayout).shapes
shapes.placeholders[0].text = 'アイドル水着画像をあつめてpptxに貼る'
top = Inches(2)
left = Inches(0.5)
width = Px(280)
height = int(width * 1.427)
txBox = shapes.add_textbox(left, top, width, height)
txBox.textframe.text = """c = requests.get('http://matome.naver.jp/odai/2135350364969742801').content
urls = [x.group(1) for x in re.finditer(r'<img src="(.+)".*?class="MTMItemThumb".*?/>', c)]
for i, url in enumerate(urls[:10], 1):
img_path = "{}.jpg".format(i)
r = requests.get(url)
if r.status_code == 200:
img = r.content
with open(img_path, 'w') as f:
f.write(img)
shapes = prs.slides.add_slide(bullet_slidelayout).shapes
shapes.placeholders[0].text = '水着アイドル ({})'.format(i)
top = Inches(1.5)
left = Inches(3)
width = Px(280)
height = int(width * 1.427)
pic = shapes.add_picture(img_path, left, top, width, height)
"""
c = requests.get('http://matome.naver.jp/odai/2135350364969742801').content
urls = [x.group(1) for x in re.finditer(r'<img src="(.+)".*?class="MTMItemThumb".*?/>', c)]
for i, url in enumerate(urls[:10], 1):
img_path = "{}.jpg".format(i)
r = requests.get(url)
if r.status_code == 200:
img = r.content
with open(img_path, 'w') as f:
f.write(img)
shapes = prs.slides.add_slide(bullet_slidelayout).shapes
shapes.placeholders[0].text = '水着アイドル ({})'.format(i)
top = Inches(1.5)
left = Inches(3)
width = Px(280)
height = int(width * 1.427)
pic = shapes.add_picture(img_path, left, top, width, height)
shapes = prs.slides.add_slide(bullet_slidelayout).shapes
shapes.placeholders[0].text = 'このスライドはpython-pptx製'
tf = shapes.placeholders[1].textframe
tf.text = 'スクリプトっぽい(DSLっぽくはない)'
tf.add_paragraph().text = '再利用性は高められそう'
tf.add_paragraph().text = 'Gitで管理できる(重要!)'
tf.add_paragraph().text = 'Sphinxの拡張にするのは面白そう'
tf.add_paragraph().text = 'livereloadで更新時にリロードしないかなぁ?'
shapes = prs.slides.add_slide(bullet_slidelayout).shapes
shapes.placeholders[0].text = 'まとめ (真のアイドルは焼津)'.format(i)
top = Inches(1.5)
left = Inches(3)
width = Px(280)
height = int(width * 1.427)
pic = shapes.add_picture("yaidumoe.jpg", left, top, width, height)
prs.save('test.pptx')