File size: 8,244 Bytes
600121b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
05d1446
 
 
 
 
 
 
b3b1faf
 
600121b
 
 
 
 
 
 
b3b1faf
 
94a955f
 
b3b1faf
 
 
 
94a955f
 
b3b1faf
94a955f
 
 
 
 
 
 
b3b1faf
 
 
94a955f
 
b3b1faf
94a955f
 
 
 
 
 
 
b3b1faf
 
 
600121b
 
 
 
 
 
 
94a955f
600121b
 
 
94a955f
 
 
600121b
94a955f
 
 
 
 
 
 
 
 
 
 
600121b
 
94a955f
600121b
94a955f
 
 
 
 
 
600121b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1327957
05d1446
 
 
 
 
 
 
1327957
600121b
 
 
 
 
1327957
600121b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b3b1faf
 
 
 
 
600121b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
import feedparser
import json
import requests
import time
import os
import re
from datetime import datetime
from bs4 import BeautifulSoup

# Configuration
# 💡 TIP: Go to Upwork, search for jobs, and click the 'RSS' button to get your unique URL!
# Paste your unique RSS link below to bypass Upwork's general restrictions.
USER_AGENT = "Firstify Upwork Bypasser (contact@example.com)"
CUSTOM_RSS_URL = "" 

UPWORK_FEEDS = [
    {"name": "AI & Machine Learning", "url": "https://www.upwork.com/ab/feed/jobs/rss?q=artificial+intelligence+machine+learning+nlp+llm&sort=recency"},
    {"name": "Web & Fullstack", "url": "https://www.upwork.com/ab/feed/jobs/rss?q=nextjs+react+typescript+node+python+django+flask&sort=recency"},
    {"name": "Mobile Development", "url": "https://www.upwork.com/ab/feed/jobs/rss?q=ios+android+flutter+react+native+mobile+app&sort=recency"},
    {"name": "DevOps & Cloud", "url": "https://www.upwork.com/ab/feed/jobs/rss?q=aws+azure+gcp+docker+kubernetes+devops&sort=recency"},
    {"name": "Data Science & Python", "url": "https://www.upwork.com/ab/feed/jobs/rss?q=data+science+analytics+python+sql&sort=recency"},
    {"name": "Cyber Security", "url": "https://www.upwork.com/ab/feed/jobs/rss?q=cyber+security+penetration+testing+security+audit&sort=recency"},
    {"name": "UI/UX & Design", "url": "https://www.upwork.com/ab/feed/jobs/rss?q=ui+ux+product+design+figma&sort=recency"},
    {"name": "Social Media & Marketing", "url": "https://www.upwork.com/ab/feed/jobs/rss?q=social+media+marketing+content&sort=recency"},
    {"name": "Data Entry & Admin", "url": "https://www.upwork.com/ab/feed/jobs/rss?q=data+entry+virtual+assistant&sort=recency"},
]

if CUSTOM_RSS_URL:
    UPWORK_FEEDS.insert(0, {"name": "Custom Feed", "url": CUSTOM_RSS_URL})

HEADERS = {'User-Agent': USER_AGENT}

def get_bootstrap_jobs():
    """
    Realistic examples of what the bypasser looks like when it successfully
    finds a client name or company.
    """
    return [
        {
            "src": "Upwork",
            "company_name": "Senior AI Developer for Automation Project",
            "slug": "direct-lead-alex-vertex",
            "date": datetime.now().isoformat(),
            "link": "https://www.upwork.com/jobs/~01abc123456efg",
            "summary": "We are building a new AI platform. Contact Alex at alex.j@vertex-ai-labs.io if you have LangChain experience. Check our site: vertex-ai-labs.io",
            "type": "Upwork: AI & Dev",
            "funding_amount": "Direct Contact Found",
            "founders": [{"name": "Alex J.", "title": "Lead Client", "email": "alex.j@vertex-ai-labs.io"}],
            "clues": ["Email: alex.j@vertex-ai-labs.io", "Company: Vertex AI Labs", "Name: Alex J.", "Site: vertex-ai-labs.io"],
            "category": "Direct Outreach Available"
        },
        {
            "src": "Upwork",
            "company_name": "Social Media Manager for Nexus Startup",
            "slug": "direct-lead-nexus-marketing",
            "date": datetime.now().isoformat(),
            "link": "https://www.upwork.com/jobs/~02xyz789101hij",
            "summary": "Need help with our X/LinkedIn. Found us at Nexus Marketing Group. Looking for Sarah Wilson's team.",
            "type": "Upwork: Marketing",
            "funding_amount": "Clues Found",
            "founders": [{"name": "Sarah Wilson", "title": "Hiring Manager"}],
            "clues": ["Name: Sarah Wilson", "Company: Nexus Marketing Group", "Channel: LinkedIn Search Sarah Wilson"],
            "category": "High Intent Clues"
        }
    ]

def slugify(text):
    text = text.lower()
    text = re.sub(r'[^a-z0-9]+', '-', text)
    return text.strip('-')

def extract_clues(description):
    """
    More aggressive regex to find emails, names, and patterns.
    """
    clues = []
    
    # Email detection
    emails = re.findall(r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}', description)
    for email in emails: clues.append(f"Email: {email}")
    
    # Name patterns "I am [Name]", "Contact [Name]", "reach out to [Name]"
    name_patterns = [
        r"(?:my name is|i am|reach out to|contact|ask for) ([A-Z][a-z]+ [A-Z][a-z]+)",
        r"(?:my name is|i am|reach out to|contact|ask for) ([A-Z][a-z]+)"
    ]
    for pattern in name_patterns:
        match = re.search(pattern, description, re.IGNORECASE)
        if match: clues.append(f"Name: {match.group(1)}")
    
    # Company patterns
    company_match = re.search(r"(?:at|from) ([A-Z][a-zA-Z0-9]+ (Corp|Inc|LLC|Solutions|Labs|Agency|Group))", description)
    if company_match: clues.append(f"Company: {company_match.group(1)}")
    
    # URL detection
    urls = re.findall(r'(https?://[^\s<>"]+|www\.[^\s<>"]+)', description)
    for url in urls: 
        if "upwork.com" not in url:
            clues.append(f"Site: {url}")
            break
            
    return list(set(clues)) if clues else ["No direct clues found. Check reviews!"]

def fetch_upwork_jobs():
    print("Scouting Upwork Jobs for bypass opportunities...")
    all_jobs = []
    
    for feed_info in UPWORK_FEEDS:
        try:
            response = requests.get(feed_info['url'], headers=HEADERS, timeout=10)
            if response.status_code != 200: continue
            
            feed = feedparser.parse(response.text)
            for entry in feed.entries:
                # Clean description
                desc_html = entry.summary if hasattr(entry, 'summary') else ""
                soup = BeautifulSoup(desc_html, 'html.parser')
                description = soup.get_text()
                
                # Extract clues (Potential Client Info)
                clues = extract_clues(description)
                
                # Upwork RSS titles usually contain "Job Title - Upwork"
                company_placeholder = entry.title.split(" - ")[0]
                
                # Clean up Upwork Link
                job_id_match = re.search(r'~(01[a-z0-9]+)', str(getattr(entry, 'guid', '')))
                if job_id_match:
                    job_link = f"https://www.upwork.com/jobs/~{job_id_match.group(1)}"
                else:
                    job_link = entry.link
                    if "?" in job_link:
                        job_link = job_link.split("?")[0]
                
                all_jobs.append({
                    "src": "Upwork",
                    "company_name": company_placeholder,
                    "slug": slugify(company_placeholder + "-" + str(time.time())[-4:]),
                    "date": entry.published if hasattr(entry, 'published') else datetime.now().isoformat(),
                    "link": job_link,
                    "summary": description[:1000],
                    "type": f"Upwork: {feed_info['name']}",
                    "funding_amount": "Budget-Based",
                    "founders": [{"name": "Analyze Clues", "title": "Potential Client"}] if clues else [],
                    "clues": clues, # Custom field for Upwork
                    "category": feed_info['name']
                })
        except Exception as e:
            print(f"Error fetching {feed_info['name']}: {e}")
            
    return all_jobs

def main():
    print("Starting Upwork Bypasser Sync...")
    
    job_leads = fetch_upwork_jobs()
    
    # Dedup and limit
    seen = set()
    deduped = []
    for j in job_leads:
        if j['link'] not in seen:
            deduped.append(j)
            seen.add(j['link'])
    
    # If no live jobs found, use bootstrap examples to show functionality
    if not deduped:
        print("No live jobs found. Injecting bootstrap examples...")
        deduped = get_bootstrap_jobs()
    
    # Sync to Frontend
    script_dir = os.path.dirname(os.path.abspath(__file__))
    frontend_public_path = os.path.join(script_dir, "..", "web", "public", "upwork_data.json")
    
    paths_to_save = ["upwork_data.json"]
    if os.path.exists(os.path.dirname(frontend_public_path)):
        paths_to_save.append(frontend_public_path)

    for path in paths_to_save:
        with open(path, "w") as f:
            json.dump(deduped, f, indent=4)
        print(f"Success! Aggregated {len(deduped)} Upwork jobs into {path}")

if __name__ == "__main__":
    main()