Skip to content

Instantly share code, notes, and snippets.

@Touexe
Created July 17, 2021 13:41
Show Gist options
  • Save Touexe/845db0d49ae3dfd8c29a7cd46b082079 to your computer and use it in GitHub Desktop.
Save Touexe/845db0d49ae3dfd8c29a7cd46b082079 to your computer and use it in GitHub Desktop.
Get reddit followed users Onlyfans links
from dataclasses import dataclass, replace
import praw
from praw.models import MoreComments
import re
from typing import List, Union

reddit = praw.Reddit(client_id=",
                        client_secret="",
                        password="",
                        user_agent='',
                        username="")

@dataclass
class Post:
    title: str
    id: str
    created_utc: str
    domain : str
    url: str
    permalink : str
    num_comments: int

@dataclass
class User:
    name: str
    id: str
    created_utc: str
    karma: str
    
    
subscribed = list(reddit.user.subreddits(limit=None))

def getSubscribedUsers(raw_subreddit_results: List[praw.models.reddit.subreddit.Subreddit])-> List[str]:
    subscribed_users = []
    for sub in subscribed:
        name = sub.display_name
        if name.startswith("u_"):
            subscribed_users.append(name.replace("u_",""))
    return sorted(subscribed_users, key=lambda x: (x.upper(), x))

def getUserOF(username : str, nfsw_only: bool = True) -> Union[str,None]:
    #old regex (onlyfans.com/[^\s]+)$
    onlyfansMatch = re.compile(r"(onlyfans.com/[A-Za-z0-9_.-]+)", re.IGNORECASE)
    user = reddit.redditor(username)
    if nfsw_only:
        if not user.subreddit["over_18"]:
            return None
        
    bio = user.subreddit.public_description
    
    OFinBio = onlyfansMatch.findall(bio)
    if OFinBio:
        url = OFinBio[0][:-1] if OFinBio[0].endswith(".") else OFinBio[0]
        print(f"{username} has {url}")
        return url
    
    submissions = user.submissions.hot(limit= 10)
    for submission in submissions:
        if not submission.stickied:
            continue
        pinned_post_url = submission.url
        OFinURL = onlyfansMatch.findall(pinned_post_url)
        if OFinURL:
            url = OFinURL[0][:-1] if OFinURL[0].endswith(".") else OFinURL[0]
            print(f"{username} has {url} in pinned post url")
            return url
            
        pinned_post_content = submission.selftext
        OFinPinnedPost = onlyfansMatch.findall(pinned_post_content)
        if OFinPinnedPost:
            url = OFinPinnedPost[0][:-1] if OFinPinnedPost[0].endswith(".") else OFinPinnedPost[0]
            print(f"{username} has {url} in pinned post")
            return url
        
        pinned_post_comments = submission.comments
        for comment in pinned_post_comments:
            if isinstance(comment, MoreComments):
                continue
            if comment.author != submission.author.name:
                continue
            
            OFinComment = onlyfansMatch.findall(comment.body)
            if OFinComment:
                url = OFinComment[0][:-1] if not OFinComment[0].endswith(".") else OFinComment[0]
                print(f"{username} has {url} in pinned post comment")
                return url
    
        
    return None
        
subscribed_users = getSubscribedUsers(subscribed)
hasOF = []
hasnoOF = []
for user in subscribed_users:
    OF = getUserOF(user)
    if OF:
        hasOF.append({'User':user, "Onlyfans":OF})
        continue
    
    hasnoOF.append(user)
        
print(f"user has of in bio {len(hasOF)}/{len(subscribed_users)}")
print("\nhas no OF")
for user in hasnoOF:
    print(user)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment