iframelyでURLをまとめて埋め込む

2020-05-04 Hugo iframely

やりたいこと

  • このサイトでは,URLの埋め込みにiframelyを使っています.
  • 複数のURLを埋め込みたいとき,一つ一つブラウザにコピーしてクリックするのは面倒です.
  • そこで,iframelyのAPIを使用して,複数のURLをまとめて埋め込みます.

やったこと

  • iframelyに無料登録し,API key を取得します.
  • URLのリストファイルを読み込み,APIにリクエストを投げるスクリプトを作ります(今回はpython) .

1. iframelyへの登録

https://iframely.com/signup から登録します. Business email addressになってますが,gmailで大丈夫です.

2. iframelyのAPI keyを取得

https://iframely.com/profile から確認します.「ここのAPI keyをコピー」の部分に表示されます.

3. pythonのスクリプトを作成

  • こんなスクリプトを書きます.
#embed_url.py
import requests
import json
import sys

def loadurls(fn):
	with open(fn) as fp:
		urls = fp.read().rstrip('\n').split('\n')
	return urls

if __name__ == '__main__':
	apikey='ここにAPI keyを貼り付け'

	if len(sys.argv) <= 1:
		print('Usage: python {} urlfilename'.format(sys.argv[0]))
		quit()

	urlfn = sys.argv[1]
	urls = loadurls(urlfn)

	for url in urls:

		com = "https://iframe.ly/api/oembed?url={}&api_key={}&iframe=card-small".format(url,apikey)

		r = requests.get(com)
		d = json.loads(r.text)

		print('\n' + url+':\n')

		if 'html' in d.keys():
			print(d['html'])
		else:
			print('ERROR: could not fetch')

埋め込み用の画像が無いページはエラーをはきます. また,com = "https://iframe.ly"の行の&iframe=card-smallを削除すれば,表示サイズの大きい埋め込みコードが取得できます.

4. 実行

同じディレクトリにURLのリストファイルを作成します.

url.list:

# url.list
https://nyakapoko.github.io/post/00_school-september/
https://nyakapoko.github.io/post/01_poweroint-shortcut/
https://nyakapoko.github.io/post/02_school-september2/

URLリストファイルを上のスクリプトと同じディレクトリにおいて,pythonを実行します.

$ python embed_url.py url.list

エラーが出たら,パッケージをインストールします.

$ pip install requests
$ pip install json

結果

こんな出力が得られます.あとはHTMLの部分をmarkdownのファイルに貼り付ければOKです.

https://nyakapoko.github.io/post/00_school-september/:

<div class="iframely-embed"><div class="iframely-responsive" style="height: 140px; padding-bottom: 0;"><a href="https://nyakapoko.github.io/post/00_school-september/" data-iframely-url="//cdn.iframe.ly/api/iframe?url=https%3A%2F%2Fnyakapoko.github.io%2Fpost%2F00_school-september%2F&amp;key=20018cd17c211e24973982bc83ba422e&amp;iframe=card-small"></a></div></div><script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>

https://nyakapoko.github.io/post/01_poweroint-shortcut/:

<div class="iframely-embed"><div class="iframely-responsive" style="height: 140px; padding-bottom: 0;"><a href="https://nyakapoko.github.io/post/01_poweroint-shortcut/" data-iframely-url="//cdn.iframe.ly/api/iframe?url=https%3A%2F%2Fnyakapoko.github.io%2Fpost%2F01_poweroint-shortcut%2F&amp;key=20018cd17c211e24973982bc83ba422e&amp;iframe=card-small"></a></div></div><script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>

https://nyakapoko.github.io/post/02_school-september2/:

<div class="iframely-embed"><div class="iframely-responsive" style="height: 140px; padding-bottom: 0;"><a href="https://nyakapoko.github.io/post/02_school-september2/" data-iframely-url="//cdn.iframe.ly/api/iframe?url=https%3A%2F%2Fnyakapoko.github.io%2Fpost%2F02_school-september2%2F&amp;key=20018cd17c211e24973982bc83ba422e&amp;iframe=card-small"></a></div></div><script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>

こんな感じ

https://nyakapoko.github.io/post/00_school-september/:

https://nyakapoko.github.io/post/01_poweroint-shortcut/:

https://nyakapoko.github.io/post/02_school-september2/:

めでたしめでたし.

追記

下の記事で書いた通り,iframelyの無料プランではひと月あたりのアクセス数に上限があるのですが,その上限に達してしまいました. 現在では,このブログではiframelyを使用せずにURLの埋め込みを行っています.

comments powered by Disqus