mirror of
https://github.com/wassname/arXiv_abstract_bot.git
synced 2026-06-27 16:44:23 +08:00
working xpost ML
This commit is contained in:
@@ -1,10 +1,12 @@
|
||||
import praw
|
||||
import logging
|
||||
import requests
|
||||
import bs4
|
||||
import html2text
|
||||
import time, os
|
||||
import bmemcached
|
||||
import re
|
||||
from prawcore import NotFound
|
||||
|
||||
# from https://github.com/arxiv-vanity/arxiv-vanity/blob/master/arxiv_vanity/scraper/arxiv_ids.py
|
||||
ARXIV_ID_PATTERN = r'([a-z\-]+(?:\.[A-Z]{2})?/\d{7}|\d+\.\d+)(v\d+)?'
|
||||
@@ -28,7 +30,10 @@ def get_bot():
|
||||
r = get_bot()
|
||||
|
||||
subreddit = r.subreddit('machinelearning')
|
||||
target_subreddit = r.subreddit('mlresearch')
|
||||
|
||||
if r.read_only == False:
|
||||
print("Connected and running.")
|
||||
# alreadydone = set()
|
||||
|
||||
|
||||
@@ -55,29 +60,78 @@ def scrape_arxiv(arxiv_id):
|
||||
|
||||
|
||||
def comment(cache):
|
||||
print(time.asctime(), "searching")
|
||||
# print(time.asctime(), "searching")
|
||||
try:
|
||||
all_posts = subreddit.new(limit=100)
|
||||
for post in all_posts:
|
||||
match = ARXIV_URL_RE.search(post.url)
|
||||
if match:
|
||||
arxiv_id = match.group(1)
|
||||
if cache.get(post.id) and cache.get(post.id) is 'T':
|
||||
print "Parsed this post already: %s"%(post.permalink)
|
||||
continue
|
||||
for comment in post.comments:
|
||||
if str(comment.author) == 'arXiv_abstract_bot':
|
||||
break
|
||||
else:
|
||||
response = scrape_arxiv(arxiv_id)
|
||||
post.reply(response)
|
||||
cache.set(post.id, 'T')
|
||||
print "Parsed post: %s"%(post.permalink)
|
||||
print(arxiv_id, response)
|
||||
time.sleep(10)
|
||||
|
||||
# crosspost
|
||||
print('found', arxiv_id)
|
||||
xpost(['r/researchml'], post)
|
||||
|
||||
# if cache.get(post.id) and cache.get(post.id) is 'T':
|
||||
# print "Parsed this post already: %s"%(post.permalink)
|
||||
# continue
|
||||
# for comment in post.comments:
|
||||
# if str(comment.author) == 'arXiv_abstract_bot':
|
||||
# break
|
||||
# else:
|
||||
# response = scrape_arxiv(arxiv_id)
|
||||
# post.reply(response)
|
||||
# cache.set(post.id, 'T')
|
||||
# print "Parsed post: %s"%(post.permalink)
|
||||
# print(arxiv_id, response)
|
||||
# time.sleep(10)
|
||||
except Exception as error:
|
||||
print(error)
|
||||
|
||||
def xpost(subs, originalpost):
|
||||
# originalpost = where.submission
|
||||
newtitle = "(X-Post r/" + str(originalpost.subreddit.display_name) + ") " + originalpost.title
|
||||
print("New post: " + str(newtitle))
|
||||
link = "https://www.reddit.com" + str(originalpost.permalink)
|
||||
workedsubs = []
|
||||
failedsubs = []
|
||||
wasError = False
|
||||
for workingsub in subs:
|
||||
exists = True
|
||||
try:
|
||||
r.subreddits.search_by_name(workingsub[2:], exact=True)
|
||||
except NotFound:
|
||||
logging.error("Failed to post")
|
||||
exists = False
|
||||
if exists == True:
|
||||
subreddit = r.subreddit(workingsub[2:])
|
||||
try:
|
||||
subreddit.submit(newtitle, url=link, resubmit=True, send_replies=False)
|
||||
workedsubs.append(str(workingsub))
|
||||
print("Posting: " + str(newtitle) + " to " + str(workingsub))
|
||||
except praw.exceptions.APIException:
|
||||
logging.error("Failed to post")
|
||||
wasError = True
|
||||
break
|
||||
else:
|
||||
failedsubs.append(str(workingsub))
|
||||
if not wasError:
|
||||
print(workedsubs,failedsubs)
|
||||
# reply(workedsubs,failedsubs,where)
|
||||
pass
|
||||
else:
|
||||
response = ""
|
||||
if workedsubs:
|
||||
response = "I was able to crosspost in "
|
||||
for i in workedsubs:
|
||||
response = response + str(i) + " and "
|
||||
response = response[:-5] + ", but I was rate-limited on the others."
|
||||
print(response)
|
||||
else:
|
||||
response = "Sorry, I was rate-limited, and I couldn't post."
|
||||
print(response)
|
||||
# where.reply(str(response) + " Make sure to give me karma to prevent that in the future.")
|
||||
|
||||
|
||||
def get_memcache_client():
|
||||
# Store IDs of comments that the bot has already replied to.
|
||||
|
||||
Reference in New Issue
Block a user