Spaces:
Running
Running
from typing import Dict | |
from agent.tools.data_providers.RapidDataProviderBase import RapidDataProviderBase, EndpointSchema | |
class LinkedinProvider(RapidDataProviderBase): | |
def __init__(self): | |
endpoints: Dict[str, EndpointSchema] = { | |
"person": { | |
"route": "/person", | |
"method": "POST", | |
"name": "Person Data", | |
"description": "Fetches any Linkedin profiles data including skills, certificates, experiences, qualifications and much more.", | |
"payload": { | |
"link": "LinkedIn Profile URL" | |
} | |
}, | |
"person_urn": { | |
"route": "/person_urn", | |
"method": "POST", | |
"name": "Person Data (Using Urn)", | |
"description": "It takes profile urn instead of profile public identifier in input", | |
"payload": { | |
"link": "LinkedIn Profile URL or URN" | |
} | |
}, | |
"person_deep": { | |
"route": "/person_deep", | |
"method": "POST", | |
"name": "Person Data (Deep)", | |
"description": "Fetches all experiences, educations, skills, languages, publications... related to a profile.", | |
"payload": { | |
"link": "LinkedIn Profile URL" | |
} | |
}, | |
"profile_updates": { | |
"route": "/profile_updates", | |
"method": "GET", | |
"name": "Person Posts (WITH PAGINATION)", | |
"description": "Fetches posts of a linkedin profile alongwith reactions, comments, postLink and reposts data.", | |
"payload": { | |
"profile_url": "LinkedIn Profile URL", | |
"page": "Page number", | |
"reposts": "Include reposts (1 or 0)", | |
"comments": "Include comments (1 or 0)" | |
} | |
}, | |
"profile_recent_comments": { | |
"route": "/profile_recent_comments", | |
"method": "POST", | |
"name": "Person Recent Activity (Comments on Posts)", | |
"description": "Fetches 20 most recent comments posted by a linkedin user (per page).", | |
"payload": { | |
"profile_url": "LinkedIn Profile URL", | |
"page": "Page number", | |
"paginationToken": "Token for pagination" | |
} | |
}, | |
"comments_from_recent_activity": { | |
"route": "/comments_from_recent_activity", | |
"method": "GET", | |
"name": "Comments from recent activity", | |
"description": "Fetches recent comments posted by a person as per his recent activity tab.", | |
"payload": { | |
"profile_url": "LinkedIn Profile URL", | |
"page": "Page number" | |
} | |
}, | |
"person_skills": { | |
"route": "/person_skills", | |
"method": "POST", | |
"name": "Person Skills", | |
"description": "Scraper all skills of a linkedin user", | |
"payload": { | |
"link": "LinkedIn Profile URL" | |
} | |
}, | |
"email_to_linkedin_profile": { | |
"route": "/email_to_linkedin_profile", | |
"method": "POST", | |
"name": "Email to LinkedIn Profile", | |
"description": "Finds LinkedIn profile associated with an email address", | |
"payload": { | |
"email": "Email address to search" | |
} | |
}, | |
"company": { | |
"route": "/company", | |
"method": "POST", | |
"name": "Company Data", | |
"description": "Fetches LinkedIn company profile data", | |
"payload": { | |
"link": "LinkedIn Company URL" | |
} | |
}, | |
"web_domain": { | |
"route": "/web-domain", | |
"method": "POST", | |
"name": "Web Domain to Company", | |
"description": "Fetches LinkedIn company profile data from a web domain", | |
"payload": { | |
"link": "Website domain (e.g., huzzle.app)" | |
} | |
}, | |
"similar_profiles": { | |
"route": "/similar_profiles", | |
"method": "GET", | |
"name": "Similar Profiles", | |
"description": "Fetches profiles similar to a given LinkedIn profile", | |
"payload": { | |
"profileUrl": "LinkedIn Profile URL" | |
} | |
}, | |
"company_jobs": { | |
"route": "/company_jobs", | |
"method": "POST", | |
"name": "Company Jobs", | |
"description": "Fetches job listings from a LinkedIn company page", | |
"payload": { | |
"company_url": "LinkedIn Company URL", | |
"count": "Number of job listings to fetch" | |
} | |
}, | |
"company_updates": { | |
"route": "/company_updates", | |
"method": "GET", | |
"name": "Company Posts", | |
"description": "Fetches posts from a LinkedIn company page", | |
"payload": { | |
"company_url": "LinkedIn Company URL", | |
"page": "Page number", | |
"reposts": "Include reposts (0, 1, or 2)", | |
"comments": "Include comments (0, 1, or 2)" | |
} | |
}, | |
"company_employee": { | |
"route": "/company_employee", | |
"method": "GET", | |
"name": "Company Employees", | |
"description": "Fetches employees of a LinkedIn company using company ID", | |
"payload": { | |
"companyId": "LinkedIn Company ID", | |
"page": "Page number" | |
} | |
}, | |
"company_updates_post": { | |
"route": "/company_updates", | |
"method": "POST", | |
"name": "Company Posts (POST)", | |
"description": "Fetches posts from a LinkedIn company page with specific count parameters", | |
"payload": { | |
"company_url": "LinkedIn Company URL", | |
"posts": "Number of posts to fetch", | |
"comments": "Number of comments to fetch per post", | |
"reposts": "Number of reposts to fetch" | |
} | |
}, | |
"search_posts_with_filters": { | |
"route": "/search_posts_with_filters", | |
"method": "GET", | |
"name": "Search Posts With Filters", | |
"description": "Searches LinkedIn posts with various filtering options", | |
"payload": { | |
"query": "Keywords/Search terms (text you put in LinkedIn search bar)", | |
"page": "Page number (1-100, each page contains 20 results)", | |
"sort_by": "Sort method: 'relevance' (Top match) or 'date_posted' (Latest)", | |
"author_job_title": "Filter by job title of author (e.g., CEO)", | |
"content_type": "Type of content post contains (photos, videos, liveVideos, collaborativeArticles, documents)", | |
"from_member": "URN of person who posted (comma-separated for multiple)", | |
"from_organization": "ID of organization who posted (comma-separated for multiple)", | |
"author_company": "ID of company author works for (comma-separated for multiple)", | |
"author_industry": "URN of industry author is connected with (comma-separated for multiple)", | |
"mentions_member": "URN of person mentioned in post (comma-separated for multiple)", | |
"mentions_organization": "ID of organization mentioned in post (comma-separated for multiple)" | |
} | |
}, | |
"search_jobs": { | |
"route": "/search_jobs", | |
"method": "GET", | |
"name": "Search Jobs", | |
"description": "Searches LinkedIn jobs with various filtering options", | |
"payload": { | |
"query": "Job search keywords (e.g., Software developer)", | |
"page": "Page number", | |
"searchLocationId": "Location ID for job search (get from Suggestion location endpoint)", | |
"easyApply": "Filter for easy apply jobs (true or false)", | |
"experience": "Experience level required (1=Internship, 2=Entry level, 3=Associate, 4=Mid senior, 5=Director, 6=Executive, comma-separated)", | |
"jobType": "Job type (F=Full time, P=Part time, C=Contract, T=Temporary, V=Volunteer, I=Internship, O=Other, comma-separated)", | |
"postedAgo": "Time jobs were posted in seconds (e.g., 3600 for past hour)", | |
"workplaceType": "Workplace type (1=On-Site, 2=Remote, 3=Hybrid, comma-separated)", | |
"sortBy": "Sort method (DD=most recent, R=most relevant)", | |
"companyIdsList": "List of company IDs, comma-separated", | |
"industryIdsList": "List of industry IDs, comma-separated", | |
"functionIdsList": "List of function IDs, comma-separated", | |
"titleIdsList": "List of job title IDs, comma-separated", | |
"locationIdsList": "List of location IDs within specified searchLocationId country, comma-separated" | |
} | |
}, | |
"search_people_with_filters": { | |
"route": "/search_people_with_filters", | |
"method": "POST", | |
"name": "Search People With Filters", | |
"description": "Searches LinkedIn profiles with detailed filtering options", | |
"payload": { | |
"keyword": "General search keyword", | |
"page": "Page number", | |
"title_free_text": "Job title to filter by (e.g., CEO)", | |
"company_free_text": "Company name to filter by", | |
"first_name": "First name of person", | |
"last_name": "Last name of person", | |
"current_company_list": "List of current companies (comma-separated IDs)", | |
"past_company_list": "List of past companies (comma-separated IDs)", | |
"location_list": "List of locations (comma-separated IDs)", | |
"language_list": "List of languages (comma-separated)", | |
"service_catagory_list": "List of service categories (comma-separated)", | |
"school_free_text": "School name to filter by", | |
"industry_list": "List of industries (comma-separated IDs)", | |
"school_list": "List of schools (comma-separated IDs)" | |
} | |
}, | |
"search_company_with_filters": { | |
"route": "/search_company_with_filters", | |
"method": "POST", | |
"name": "Search Company With Filters", | |
"description": "Searches LinkedIn companies with detailed filtering options", | |
"payload": { | |
"keyword": "General search keyword", | |
"page": "Page number", | |
"company_size_list": "List of company sizes (comma-separated, e.g., A,D)", | |
"hasJobs": "Filter companies with jobs (true or false)", | |
"location_list": "List of location IDs (comma-separated)", | |
"industry_list": "List of industry IDs (comma-separated)" | |
} | |
} | |
} | |
base_url = "https://linkedin-data-scraper.p.rapidapi.com" | |
super().__init__(base_url, endpoints) | |
if __name__ == "__main__": | |
from dotenv import load_dotenv | |
load_dotenv() | |
tool = LinkedinProvider() | |
result = tool.call_endpoint( | |
route="comments_from_recent_activity", | |
payload={"profile_url": "https://www.linkedin.com/in/adamcohenhillel/", "page": 1} | |
) | |
print(result) | |