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) | |