mirror of
https://github.com/getpelican/pelican.git
synced 2025-10-15 20:28:56 +02:00
Deal with broken embedded video links when importing from Tumblr (#3218)
Co-authored-by: boxydog <boxydog@users.noreply.github.com> Co-authored-by: Will Thong <will@willthong.com>
This commit is contained in:
parent
6a623ba10a
commit
9c87d8f3a3
2 changed files with 120 additions and 2 deletions
|
|
@ -532,3 +532,113 @@ class TestTumblrImporter(TestWithOsDefaults):
|
||||||
['economics'], 'published', 'article', 'html')],
|
['economics'], 'published', 'article', 'html')],
|
||||||
posts,
|
posts,
|
||||||
posts)
|
posts)
|
||||||
|
|
||||||
|
@patch("pelican.tools.pelican_import._get_tumblr_posts")
|
||||||
|
def test_video_embed(self, get):
|
||||||
|
def get_posts(api_key, blogname, offset=0):
|
||||||
|
if offset > 0:
|
||||||
|
return []
|
||||||
|
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
"type": "video",
|
||||||
|
"blog_name": "testy",
|
||||||
|
"slug": "the-slug",
|
||||||
|
"date": "2017-07-07 20:31:41 GMT",
|
||||||
|
"timestamp": 1499459501,
|
||||||
|
"state": "published",
|
||||||
|
"format": "html",
|
||||||
|
"tags": [],
|
||||||
|
"source_url": "https://href.li/?https://www.youtube.com/a",
|
||||||
|
"source_title": "youtube.com",
|
||||||
|
"caption": "<p>Caption</p>",
|
||||||
|
"player": [
|
||||||
|
{
|
||||||
|
"width": 250,
|
||||||
|
"embed_code":
|
||||||
|
"<iframe>1</iframe>"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 400,
|
||||||
|
"embed_code":
|
||||||
|
"<iframe>2</iframe>"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 500,
|
||||||
|
"embed_code":
|
||||||
|
"<iframe>3</iframe>"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"video_type": "youtube",
|
||||||
|
}
|
||||||
|
]
|
||||||
|
get.side_effect = get_posts
|
||||||
|
|
||||||
|
posts = list(tumblr2fields("api_key", "blogname"))
|
||||||
|
self.assertEqual(
|
||||||
|
[('youtube.com',
|
||||||
|
'<p><a href="https://href.li/?'
|
||||||
|
'https://www.youtube.com/a">via</a></p>\n<p>Caption</p>'
|
||||||
|
'<iframe>1</iframe>\n'
|
||||||
|
'<iframe>2</iframe>\n'
|
||||||
|
'<iframe>3</iframe>\n',
|
||||||
|
'2017-07-07-the-slug',
|
||||||
|
'2017-07-07 20:31:41', 'testy', ['video'], [], 'published',
|
||||||
|
'article', 'html')],
|
||||||
|
posts,
|
||||||
|
posts)
|
||||||
|
|
||||||
|
@patch("pelican.tools.pelican_import._get_tumblr_posts")
|
||||||
|
def test_broken_video_embed(self, get):
|
||||||
|
def get_posts(api_key, blogname, offset=0):
|
||||||
|
if offset > 0:
|
||||||
|
return []
|
||||||
|
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
"type": "video",
|
||||||
|
"blog_name": "testy",
|
||||||
|
"slug": "the-slug",
|
||||||
|
"date": "2016-08-14 16:37:35 GMT",
|
||||||
|
"timestamp": 1471192655,
|
||||||
|
"state": "published",
|
||||||
|
"format": "html",
|
||||||
|
"tags": [
|
||||||
|
"interviews"
|
||||||
|
],
|
||||||
|
"source_url":
|
||||||
|
"https://href.li/?https://www.youtube.com/watch?v=b",
|
||||||
|
"source_title": "youtube.com",
|
||||||
|
"caption":
|
||||||
|
"<p>Caption</p>",
|
||||||
|
"player": [
|
||||||
|
{
|
||||||
|
"width": 250,
|
||||||
|
# If video is gone, embed_code is False
|
||||||
|
"embed_code": False
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 400,
|
||||||
|
"embed_code": False
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"width": 500,
|
||||||
|
"embed_code": False
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"video_type": "youtube",
|
||||||
|
}
|
||||||
|
]
|
||||||
|
get.side_effect = get_posts
|
||||||
|
|
||||||
|
posts = list(tumblr2fields("api_key", "blogname"))
|
||||||
|
self.assertEqual(
|
||||||
|
[('youtube.com',
|
||||||
|
'<p><a href="https://href.li/?https://www.youtube.com/watch?'
|
||||||
|
'v=b">via</a></p>\n<p>Caption</p>'
|
||||||
|
'<p>(This video isn\'t available anymore.)</p>\n',
|
||||||
|
'2016-08-14-the-slug',
|
||||||
|
'2016-08-14 16:37:35', 'testy', ['video'], ['interviews'],
|
||||||
|
'published', 'article', 'html')],
|
||||||
|
posts,
|
||||||
|
posts)
|
||||||
|
|
|
||||||
|
|
@ -459,8 +459,16 @@ def tumblr2fields(api_key, blogname):
|
||||||
fmtstr = '<p><a href="%s">via</a></p>\n'
|
fmtstr = '<p><a href="%s">via</a></p>\n'
|
||||||
source = fmtstr % post.get('source_url')
|
source = fmtstr % post.get('source_url')
|
||||||
caption = post.get('caption')
|
caption = post.get('caption')
|
||||||
players = '\n'.join(player.get('embed_code')
|
players = [
|
||||||
for player in post.get('player'))
|
# If embed_code is False, couldn't get the video
|
||||||
|
player.get('embed_code') or None
|
||||||
|
for player in post.get('player')]
|
||||||
|
# If there are no embeddable players, say so, once
|
||||||
|
if len(players) > 0 and all(
|
||||||
|
player is None for player in players):
|
||||||
|
players = "<p>(This video isn't available anymore.)</p>\n"
|
||||||
|
else:
|
||||||
|
players = '\n'.join(players)
|
||||||
content = source + caption + players
|
content = source + caption + players
|
||||||
elif type == 'answer':
|
elif type == 'answer':
|
||||||
title = post.get('question')
|
title = post.get('question')
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue