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