Twitter изображение бот-сообщения каждые 2 часа

Это бот с изображением Twitter, который вызывается каждые два часа для публикации изображения из папки, файлы нумеруются последовательно, а текущее число сохраняется в текстовом файле, поэтому оно может оставаться постоянным между прогонами. Типы файлов изображений варьируются между.jpg и.gif, и я не знаю, как объяснить это в функции picture() моего кода.

import os
from twython import Twython 
from twython import TwythonStreamer

APP_KEY = ''
APP_SECRET = ''
OAUTH_TOKEN = ''
OAUTH_TOKEN_SECRET = ''

f = open('pictures.txt', 'r+')
z = f.read()

def picture():
    picture = open('/0/' + 'picture' + str(z))
    f.write(str(z)+'\n')
    global z
    z += 1
    promote(picture)
    f.write(z)
    f.close


def promote(photo):
    twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)
    twitter.update_status_with_media(status='', media=photo)

picture()

1 ответ

Решение

Поскольку ваш предыдущий вопрос был отложен, я снова публикую этот ответ.

Используйте glob, чтобы найти файлы, соответствующие префиксу, imghdr, чтобы проверить тип файла (твиттер не поддерживает все файлы изображений), и убедитесь, что вы преобразуете порядковый номер изображения в int, когда вы читаете его, и в строку, когда Вы обновляете файл. Обновление файла требует сначала поиска в начале файла, и это предполагает, что порядковый номер всегда будет увеличиваться.

import imghdr
from glob import glob

SUPPORTED_IMG_TYPES = 'gif jpeg png'.split()
IMG_SEQ_FILE = '/0/pictures.txt'
GLOB_PATTERN = '/0/picture%d.*'

def send_to_twitter(filename):
    print "sent %s to twitter" % filename
    return True

with open(IMG_SEQ_FILE, 'r+') as f:
    seq = int(f.readline().strip())
    for name in glob(GLOB_PATTERN % seq):
        img_type = imghdr.what(name)
        if img_type in SUPPORTED_IMG_TYPES:
            if send_to_twitter(name):
                f.seek(0)
                seq += 1
                f.write(str(seq))
                break
        else:
            if not img_type:
               print "%s is not an image file" % name
            else:
               print "%s unsupported image type: %s" % (name, img_type)

Все, что вам нужно сделать, это добавить свой код, чтобы отправить данные файла изображения в Twitter.

Другие вопросы по тегам