Add fetchThreadImages (#434)
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
# -*- coding: UTF-8 -*-
|
# -*- coding: UTF-8 -*-
|
||||||
|
|
||||||
|
from itertools import islice
|
||||||
from fbchat import Client
|
from fbchat import Client
|
||||||
from fbchat.models import *
|
from fbchat.models import *
|
||||||
|
|
||||||
@@ -62,3 +63,9 @@ print("thread's type: {}".format(thread.type))
|
|||||||
|
|
||||||
|
|
||||||
# Here should be an example of `getUnread`
|
# Here should be an example of `getUnread`
|
||||||
|
|
||||||
|
|
||||||
|
# Print image url for 20 last images from thread.
|
||||||
|
images = client.fetchThreadImages("<thread id>")
|
||||||
|
for image in islice(image, 20):
|
||||||
|
print(image.large_preview_url)
|
||||||
|
@@ -981,6 +981,42 @@ class Client(object):
|
|||||||
"""
|
"""
|
||||||
return self._buddylist.get(str(user_id))
|
return self._buddylist.get(str(user_id))
|
||||||
|
|
||||||
|
def fetchThreadImages(self, thread_id=None):
|
||||||
|
"""
|
||||||
|
Creates generator object for fetching images posted in thread.
|
||||||
|
:param thread_id: ID of the thread
|
||||||
|
:return: :class:`ImageAttachment` or :class:`VideoAttachment`.
|
||||||
|
:rtype: iterable
|
||||||
|
"""
|
||||||
|
thread_id, thread_type = self._getThread(thread_id, None)
|
||||||
|
data = {"id": thread_id, "first": 48}
|
||||||
|
thread_id = str(thread_id)
|
||||||
|
j = self.graphql_request(_graphql.from_query_id("515216185516880", data))
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
i = j[thread_id]["message_shared_media"]["edges"][0]
|
||||||
|
except IndexError:
|
||||||
|
if j[thread_id]["message_shared_media"]["page_info"].get(
|
||||||
|
"has_next_page"
|
||||||
|
):
|
||||||
|
data["after"] = j[thread_id]["message_shared_media"][
|
||||||
|
"page_info"
|
||||||
|
].get("end_cursor")
|
||||||
|
j = self.graphql_request(
|
||||||
|
_graphql.from_query_id("515216185516880", data)
|
||||||
|
)
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
|
||||||
|
if i["node"].get("__typename") == "MessageImage":
|
||||||
|
yield ImageAttachment._from_list(i)
|
||||||
|
elif i["node"].get("__typename") == "MessageVideo":
|
||||||
|
yield VideoAttachment._from_list(i)
|
||||||
|
else:
|
||||||
|
yield Attachment(uid=i["node"].get("legacy_attachment_id"))
|
||||||
|
del j[thread_id]["message_shared_media"]["edges"][0]
|
||||||
|
|
||||||
"""
|
"""
|
||||||
END FETCH METHODS
|
END FETCH METHODS
|
||||||
"""
|
"""
|
||||||
|
@@ -155,6 +155,18 @@ class ImageAttachment(Attachment):
|
|||||||
uid=data.get("legacy_attachment_id"),
|
uid=data.get("legacy_attachment_id"),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def _from_list(cls, data):
|
||||||
|
data = data["node"]
|
||||||
|
return cls(
|
||||||
|
width=data["original_dimensions"].get("x"),
|
||||||
|
height=data["original_dimensions"].get("y"),
|
||||||
|
thumbnail_url=data["image"].get("uri"),
|
||||||
|
large_preview=data["image2"],
|
||||||
|
preview=data["image1"],
|
||||||
|
uid=data["legacy_attachment_id"],
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@attr.s(cmp=False, init=False)
|
@attr.s(cmp=False, init=False)
|
||||||
class VideoAttachment(Attachment):
|
class VideoAttachment(Attachment):
|
||||||
@@ -252,6 +264,18 @@ class VideoAttachment(Attachment):
|
|||||||
uid=data["target"].get("video_id"),
|
uid=data["target"].get("video_id"),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def _from_list(cls, data):
|
||||||
|
data = data["node"]
|
||||||
|
return cls(
|
||||||
|
width=data["original_dimensions"].get("x"),
|
||||||
|
height=data["original_dimensions"].get("y"),
|
||||||
|
small_image=data["image"],
|
||||||
|
medium_image=data["image1"],
|
||||||
|
large_image=data["image2"],
|
||||||
|
uid=data["legacy_attachment_id"],
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def graphql_to_attachment(data):
|
def graphql_to_attachment(data):
|
||||||
_type = data["__typename"]
|
_type = data["__typename"]
|
||||||
|
Reference in New Issue
Block a user