в yampy python yammer api изображения доступны только для входа в систему - PullRequest
0 голосов
/ 30 октября 2018

пакет yampy yammer для python позволяет получить URL-адрес изображений в сообщениях. Однако эти изображения доступны для просмотра, только если вы вошли в систему.

У меня есть доступ к содержимому сообщения через API с токеном доступа, но как мне загрузить изображения?

    import yampy
import pprint
from werkzeug.wrappers import Request, Response
from datetime import datetime
import textwrap
import os,webbrowser
from flask import Flask
from flask import jsonify
pp = pprint.PrettyPrinter(indent=4)
authenticator = yampy.Authenticator(client_id="asdfadsfasdfsdf",
                                    client_secret="asdfasdfasdf")
app = Flask(__name__)
redirect_uri = "https://localhost:8000/yammerasdf/api/v1/redirect"
# auth_url = authenticator.authorization_url(redirect_uri=redirect_uri)
# access_token = authenticator.fetch_access_token(code)
# access_data = authenticator.fetch_access_data(code)
# access_token = access_data.access_token.token
# user_info = access_data.user
# network_info = access_data.network
yammer = yampy.Yammer(access_token="asdfasdfasdfsd-asdfasdfadsf")
@app.route("/")
def hello():
    messages = yammer.messages.from_user(2323423432, older_than=None, newer_than=None, limit=3, threaded=1)
    # asdfmessages = yammer.messages.from_user(1663406272)
    allposts = ''
    messagesdata= []
    for message in messages.messages:
        post= '<div class="chat-body clearfix"><div class="header"><strong class="primary-font">asdfasdfdsf</strong>'
        d1= message.created_at.split()[0]
        d = datetime.strptime(d1, '%Y/%m/%d')
        day_string = d.strftime('%A, %B %d')
        post+= '<small class="pull-right text-muted">' + day_string + '</small></div>'
        post+='<p style="margin-top:10px"><a href="' + message.web_url + '" target="_blank" style="font-size:13px;padding:15px" class="thumbnail">'
        messageimages = []
        for image in message.attachments:
            webbrowser.open(image.image.url)
            # urllib.request.urlretrieve(image.image.url)
            # urllib.urlretrieve(image.image.url, "local-filename.jpg")
            post+='<img src="' + image.image.url + '">'
            messageimages.append(image.image.url)
        post+=  textwrap.wrap(message.content_excerpt, 120)[0] + '...</a></p></div><hr>'
        allposts += post
        messagedict = {'date':day_string, 'url':message.web_url, 'images':messageimages, 'content':textwrap.wrap(message.content_excerpt, 120)[0]}
        messagesdata.append(messagedict.copy())
    # messagesdata=['html',allposts]
    return jsonify(messagesdata)
if __name__ == '__main__':
    from werkzeug.serving import run_simple
    port = int(os.environ.get('PORT', 5000))
    app.run(host='0.0.0.0', port=port)
    # run_simple('localhost', port, app)

1 Ответ

0 голосов
/ 09 января 2019

Yampy возвращает только данные обратно в формате json. Чтобы загрузить изображение, вам нужен сырой ответ и поток. Для этого вы можете использовать запросы и shutil вместо:

import requests
import shutil

headers = {"Authorization": "Bearer " + access_token}
response = requests.get("yammer_image_url", headers=headers, stream=True)
with open("path_to_new_image.jpg", "wb") as f:
    response.raw.decode_content = True
    shutil.copyfileobj(response.raw, f)
...