Привет, ребята, так что я работаю над твиттер-ботом, который берет сообщения от reddit и пишет в Твиттере. Моя проблема сейчас заключается в том, что при запуске я получаю сообщение об ошибке «FileNotFoundError: [Errno 2] Нет такого файла или каталога:« posts.txt »».
Но дело в том, как вы увидите на изображении ниже и через мой
code, posts.txt существует, и он находится в том же каталоге. Так что я застрял на том, что
актуальная проблема есть. У меня есть почти идентичная программа для этого, где
Функция «Already_Tweeted» работает, но единственное отличие состоит в том, что
Также можно использовать файлы изображений (используя BeautifulSoup). Может ли это способствовать этому?
ошибка?
Это не полный проект, а только то, что, мы надеемся, актуально
import praw
import tweepy
import time
import os
from bs4 import BeautifulSoup as bs
import requests
posted_reddit_ids = 'posted.txt'
def tweet_creator(subreddit_info):
'''Goes through posts on reddit and extracts a shortened link, title & ID'''
post_links = [] #list to store our links
post_titles = [] #list to store our titles
post_ids = [] #list to store our id's
post_imgs = []
print("[bot] extracting posts from sub-reddit")
for submission in subreddit_info.new(limit=5):
if not already_tweeted(submission.id):
post_titles.append(submission.title)
post_links.append(submission.shortlink)
post_ids.append(submission.id)
post_imgs = get_image(submission.url)
print(post_imgs)
else:
print("Already Tweeted")
return post_links, post_titles, post_ids, post_imgs
def already_tweeted(id):
'''reads through our .txt file and determines if tweet has already been posted'''
found = 0
with open(posted_reddit_ids, 'r') as f:
for line in f:
if id in line:
found = 1
break
return found
def main():
'''Main function'''
# If the tweet tracking file does not already exist, create it
if not os.path.exists(posted_reddit_ids):
with open(posted_reddit_ids, 'w'):
pass
if not os.path.exists(img_dir):
os.makedirs(img_dir)
subreddit = setup_connection_reddit(subreddit_to_watch)
post_links, post_titles, post_ids, post_imgs = tweet_creator(subreddit)
tweeter(post_links, post_titles, post_ids,post_imgs)
if __name__ == '__main__':
main()
Чтобы показать, что файл и программа находятся в одном каталоге
Edit:
Кажется, ошибка полностью исчезает, когда я удаляю post_imgs = get_image (submission.url)
Вот мой код для функции get_image, возможно, это поможет решить мою проблему
def get_image(img_url):
url = img_url
r = requests.get(url, headers = {'User-Agent' : 'reddit Twitter tool monitoring (by /u/RivianJourneyMan)'})
data = r.text
soup = bs(data, 'lxml')
image_tags = soup.findAll('img')
os.chdir(img_dir)
x = 0
mylist = []
for image in image_tags:
try:
url = image['src']
source = requests.get(url, stream = True)
if source.status_code == 200:
img_file = img_dir + str(x) + '.jpg'
with open(img_file, 'wb') as f:
f.write(requests.get(url).content)
mylist.append(img_file)
f.close()
x += 1
return img_file
except:
mylist.append(None)
print(mylist)
return mylist
То, что я пытаюсь сделать здесь, это вернуть список файлов .jpg в функцию get_image, а затем скопировать этот список в post_imgs в функции tweet_creator.