Skip to content

Commit 119b108

Browse files
authored
Merge pull request #177 from line/issue-131-contentProvider
New fields (mainly, contentProvider) in Image, Video, and Audio
2 parents 7b1a39a + 3ec15c5 commit 119b108

File tree

3 files changed

+84
-13
lines changed

3 files changed

+84
-13
lines changed

linebot/models/messages.py

Lines changed: 50 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ def __init__(self, id=None, **kwargs):
4141
class TextMessage(Message):
4242
"""TextMessage.
4343
44-
https://devdocs.line.me/en/#text-message
44+
https://developers.line.biz/en/reference/messaging-api/#wh-text
4545
4646
Message object which contains the text sent from the source.
4747
"""
@@ -62,67 +62,89 @@ def __init__(self, id=None, text=None, **kwargs):
6262
class ImageMessage(Message):
6363
"""ImageMessage.
6464
65-
https://devdocs.line.me/en/#image-message
65+
https://developers.line.biz/en/reference/messaging-api/#wh-image
6666
6767
Message object which contains the image content sent from the source.
6868
The binary image data can be retrieved with the Content API.
6969
"""
7070

71-
def __init__(self, id=None, **kwargs):
71+
def __init__(self, id=None, content_provider=None, **kwargs):
7272
"""__init__ method.
7373
7474
:param str id: Message ID
75+
:param content_provider: ContentProvider object
76+
:type content_provider:
77+
:py:class:`linebot.models.messages.ContentProvider` | dict[str, str]
7578
:param kwargs:
7679
"""
7780
super(ImageMessage, self).__init__(id=id, **kwargs)
7881

7982
self.type = 'image'
83+
self.content_provider = self.get_or_new_from_json_dict(
84+
content_provider, ContentProvider
85+
)
8086

8187

8288
class VideoMessage(Message):
8389
"""VideoMessage.
8490
85-
https://devdocs.line.me/en/#video-message
91+
https://developers.line.biz/en/reference/messaging-api/#wh-video
8692
8793
Message object which contains the video content sent from the source.
8894
The binary video data can be retrieved with the Content API.
8995
"""
9096

91-
def __init__(self, id=None, **kwargs):
97+
def __init__(self, id=None, duration=None, content_provider=None, **kwargs):
9298
"""__init__ method.
9399
94100
:param str id: Message ID
101+
:param long duration: Length of video file (milliseconds)
102+
:param content_provider: ContentProvider object
103+
:type content_provider:
104+
:py:class:`linebot.models.messages.ContentProvider` | dict[str, str]
95105
:param kwargs:
96106
"""
97107
super(VideoMessage, self).__init__(id=id, **kwargs)
98108

99109
self.type = 'video'
110+
self.duration = duration
111+
self.content_provider = self.get_or_new_from_json_dict(
112+
content_provider, ContentProvider
113+
)
100114

101115

102116
class AudioMessage(Message):
103117
"""AudioMessage.
104118
105-
https://devdocs.line.me/en/#audio-message
119+
https://developers.line.biz/en/reference/messaging-api/#wh-audio
106120
107121
Message object which contains the audio content sent from the source.
108122
The binary audio data can be retrieved with the Content API.
109123
"""
110124

111-
def __init__(self, id=None, **kwargs):
125+
def __init__(self, id=None, duration=None, content_provider=None, **kwargs):
112126
"""__init__ method.
113127
114128
:param str id: Message ID
129+
:param long duration: Length of audio file (milliseconds)
130+
:param content_provider: ContentProvider object
131+
:type content_provider:
132+
:py:class:`linebot.models.messages.ContentProvider` | dict[str, str]
115133
:param kwargs:
116134
"""
117135
super(AudioMessage, self).__init__(id=id, **kwargs)
118136

119137
self.type = 'audio'
138+
self.duration = duration
139+
self.content_provider = self.get_or_new_from_json_dict(
140+
content_provider, ContentProvider
141+
)
120142

121143

122144
class LocationMessage(Message):
123145
"""LocationMessage.
124146
125-
https://devdocs.line.me/en/#location-message
147+
https://developers.line.biz/en/reference/messaging-api/#wh-location
126148
"""
127149

128150
def __init__(self, id=None, title=None, address=None, latitude=None, longitude=None,
@@ -148,7 +170,7 @@ def __init__(self, id=None, title=None, address=None, latitude=None, longitude=N
148170
class StickerMessage(Message):
149171
"""StickerMessage.
150172
151-
https://devdocs.line.me/en/#sticker-message
173+
https://developers.line.biz/en/reference/messaging-api/#wh-sticker
152174
153175
Message object which contains the sticker data sent from the source.
154176
For a list of basic LINE stickers and sticker IDs, see sticker list.
@@ -172,7 +194,7 @@ def __init__(self, id=None, package_id=None, sticker_id=None, **kwargs):
172194
class FileMessage(Message):
173195
"""FileMessage.
174196
175-
https://devdocs.line.me/en/#file-message
197+
https://developers.line.biz/en/reference/messaging-api/#wh-file
176198
177199
Message object which contains the file content sent from the source.
178200
The binary file data can be retrieved with the Content API.
@@ -191,3 +213,21 @@ def __init__(self, id=None, file_name=None, file_size=None, **kwargs):
191213
self.type = 'file'
192214
self.file_size = file_size
193215
self.file_name = file_name
216+
217+
218+
class ContentProvider(Base):
219+
"""Content provider."""
220+
221+
def __init__(self, type=None, original_content_url=None, preview_image_url=None, **kwargs):
222+
"""__init__ method.
223+
224+
:param str type: Provider of the content. `line` or `external`.
225+
:param str original_content_url: URL of the content.
226+
:param str preview_image_url: URL of the preview image.
227+
:param kwargs:
228+
"""
229+
super(ContentProvider, self).__init__(**kwargs)
230+
231+
self.type = type
232+
self.original_content_url = original_content_url
233+
self.preview_image_url = preview_image_url

tests/test_webhook.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,11 @@ def test_parse(self):
8585
self.assertIsInstance(events[1].message, ImageMessage)
8686
self.assertEqual(events[1].message.id, '325708')
8787
self.assertEqual(events[1].message.type, 'image')
88+
self.assertEqual(events[1].message.content_provider.type, 'external')
89+
self.assertEqual(events[1].message.content_provider.original_content_url,
90+
"https://example.com")
91+
self.assertEqual(events[1].message.content_provider.preview_image_url,
92+
"https://example.com")
8893

8994
# MessageEvent, SourceUser, VideoMessage
9095
self.assertIsInstance(events[2], MessageEvent)
@@ -97,6 +102,12 @@ def test_parse(self):
97102
self.assertIsInstance(events[2].message, VideoMessage)
98103
self.assertEqual(events[2].message.id, '325708')
99104
self.assertEqual(events[2].message.type, 'video')
105+
self.assertEqual(events[2].message.duration, 60000)
106+
self.assertEqual(events[2].message.content_provider.type, 'external')
107+
self.assertEqual(events[2].message.content_provider.original_content_url,
108+
"https://example.com")
109+
self.assertEqual(events[2].message.content_provider.preview_image_url,
110+
"https://example.com")
100111

101112
# MessageEvent, SourceUser, AudioMessage
102113
self.assertIsInstance(events[3], MessageEvent)
@@ -109,6 +120,10 @@ def test_parse(self):
109120
self.assertIsInstance(events[3].message, AudioMessage)
110121
self.assertEqual(events[3].message.id, '325708')
111122
self.assertEqual(events[3].message.type, 'audio')
123+
self.assertEqual(events[3].message.duration, 60000)
124+
self.assertEqual(events[3].message.content_provider.type, 'external')
125+
self.assertEqual(events[3].message.content_provider.original_content_url,
126+
"https://example.com")
112127

113128
# MessageEvent, SourceUser, LocationMessage
114129
self.assertIsInstance(events[4], MessageEvent)

tests/text/webhook.json

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,12 @@
2424
},
2525
"message": {
2626
"id": "325708",
27-
"type": "image"
27+
"type": "image",
28+
"contentProvider": {
29+
"type": "external",
30+
"originalContentUrl": "https://example.com",
31+
"previewImageUrl": "https://example.com"
32+
}
2833
}
2934
},
3035
{
@@ -37,7 +42,13 @@
3742
},
3843
"message": {
3944
"id": "325708",
40-
"type": "video"
45+
"type": "video",
46+
"duration": 60000,
47+
"contentProvider": {
48+
"type": "external",
49+
"originalContentUrl": "https://example.com",
50+
"previewImageUrl": "https://example.com"
51+
}
4152
}
4253
},
4354
{
@@ -50,7 +61,12 @@
5061
},
5162
"message": {
5263
"id": "325708",
53-
"type": "audio"
64+
"type": "audio",
65+
"duration": 60000,
66+
"contentProvider": {
67+
"type": "external",
68+
"originalContentUrl": "https://example.com"
69+
}
5470
}
5571
},
5672
{

0 commit comments

Comments
 (0)