mcpField
F
finding-software-engineers-on-twitter

finding-software-engineers-on-twitter

github.com/apidojo-io其他1780 次安装24 周前更新
代码仓库

关于 finding-software-engineers-on-twitter

用于在 Twitter/X 上发现软件工程师的招聘研究技能,通过技术栈关键词、求职信号和社区活动寻找候选人,并补充资料后评估匹配度。

主要功能

  1. 01按技术栈和职位信号搜索推文
  2. 02汇总并去重用户账号
  3. 03抓取候选人资料
  4. 04按技术栈、求职意向和活跃度评分
  5. 05标记经验级别及潜在机器人账号

适用场景

  1. 01寻找掌握特定技术栈的工程师
  2. 02筛选公开表达求职意向的候选人
  3. 03按活跃度和经验优先排序候选人

MCP 相关

可通过 Apify MCP 的 run-actor 工具运行 apidojo~tweet-scraper 和 apidojo~twitter-user-scraper。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/apidojo-io/apidojo-skills --skill finding-software-engineers-on-twitter

安装后在 Claude Code 中输入/finding-software-engineers-on-twitter确认已加载。

详细介绍

在 Twitter 上寻找软件工程师

通过技术栈关键词、开放求职信号和工程社区活动,在 Twitter/X 上发掘软件工程师。Twitter 上活跃于技术社区的工程师,是很有价值的被动候选人信号。

前提条件

  • 已设置 APIFY_TOKEN 环境变量
  • 可选:已安装 Apify MCP 服务

输入

参数类型必填默认值说明
startUrls数组可选[]Twitter 个人资料或推文 URL
twitterHandles数组可选[]Twitter 用户名(不带 @)
twitterUserIds数组可选[]Twitter 用户 ID
getFollowers布尔值可选false提取关注者列表
getFollowing布尔值可选false提取正在关注的账号列表
getRetweeters布尔值可选false提取转发指定推文 URL 的用户
includeUnavailableUsers布尔值可选false包含不可用或已暂停的用户
maxItems数字可选不限最多返回的用户数
customMapFunction字符串可选—用于转换每个输出对象的 JavaScript 函数

工作流

Progress:
- [ ] Step 1: Search tweets by tech stack + role signals
- [ ] Step 2: Collect unique handles
- [ ] Step 3: Enrich profiles via twitter-user-scraper
- [ ] Step 4: Score candidate fit
- [ ] Step 5: Deliver candidate list
步骤 1:搜索查询
Queries: ["[TECH_STACK] engineer", "[TECH_STACK] developer", "senior [TECH_STACK]",
          "built with [TECH_STACK]", "[TECH_STACK] open to work", "[TECH_STACK] job search"]

针对开放求职筛选:添加 "looking for [TECH_STACK] role"、"[TECH_STACK] available"

推荐 — run_actor.js(自动处理等待、输出和文件保存):

# Quick answer (prints table to chat)
node scripts/run_actor.js \
  --actor "apidojo~twitter-user-scraper" \
  --input '{"param": "value"}'

# Save as CSV
node scripts/run_actor.js \
  --actor "apidojo~twitter-user-scraper" \
  --input '{"param": "value"}' \
  --output YYYY-MM-DD_results.csv --format csv

# Save as JSON
node scripts/run_actor.js \
  --actor "apidojo~twitter-user-scraper" \
  --input '{"param": "value"}' \
  --output YYYY-MM-DD_results.json --format json

必须在环境变量或 .env 文件中设置 APIFY_TOKEN。

如果 Apify MCP 可用:

Tool: apify:run-actor
Actor: "apidojo~tweet-scraper"
Input:
{
  "searchTerms": ["[TECH_STACK] engineer", "senior [TECH_STACK] developer", "built with [TECH_STACK]"],
  "maxItems": 300,
  "tweetLanguage": "en"
}

REST API 回退方案:

curl -X POST \
  "https://api.apify.com/v2/acts/apidojo~tweet-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": ["Python engineer", "senior Python developer", "built with Python"], "maxItems": 300}'

收集结果中不重复的 author.username。

步骤 2:丰富个人资料

如果 Apify MCP 可用:

Tool: apify:run-actor
Actor: "apidojo~twitter-user-scraper"
Input: {"usernames": ["[username1]", "[username2]", "..."]}

REST API 回退方案:

curl -X POST \
  "https://api.apify.com/v2/acts/apidojo~twitter-user-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"usernames": ["handle1", "handle2"]}'
步骤 3:评估候选人质量

**技术栈确认:**简介或近期推文提及目标技术栈 → stack_confirmed = true

根据简介推断职位级别:

  • "senior"、"staff"、"principal"、"lead"、"CTO"、"VP Eng" → 高级及以上
  • "mid"、"3+ years"、"5 years" → 中级
  • "junior"、"new grad"、"bootcamp" → 初级

开放求职评分:

candidate_score = (stack_confirmed ? 1 : 0) * 0.35
                + (open_to_work_signal ? 1 : 0) * 0.30
                + (followerCount in 200..20000 ? 1 : 0.6) * 0.20
                + (tweeted_in_last_30_days ? 1 : 0) * 0.15

活跃 = 过去 30 天内发过推文;被动 = 30–90 天;不活跃 = 超过 90 天

步骤 4:边缘情况
  • 结果主要是开发者工具公司:过滤掉 followerCount > 50K 且简介提及公司或品牌的账号——这些很可能是开发者工具营销账号
  • 按位置筛选:Twitter 简介中的位置是自由文本——使用 contains 匹配;过滤掉位置含糊或非地理位置的个人资料
  • 小众技术栈的结果少于 20 个:扩大到相关语言类别(例如,“Rust” → “systems programming”),或移除职位级别筛选条件
  • 机器人账号:将 follower/following ratio < 0.05 且 tweetsCount < 10 的个人资料标记为疑似机器人

输出格式

# Software Engineer Candidates: [TECH_STACK]
Profiles found: [N] | Open-to-work: [N] | Senior: [N] | Mid: [N] | Active: [N] | Date: [DATE]

## Priority: Open-to-Work Candidates
| Name | @Handle | Role Level | Location | Stack Confirmed | Followers | Last Active | Score |
|------|---------|-----------|---------|----------------|-----------|------------|-------|
| [name] | @[handle] | Senior | [city] | ✓ | [N] | [X days ago] | [0.XX] |

## Passive Candidates (Not Actively Searching)
| Name | @Handle | Role Level | Location | Stack | Followers | Score |
|------|---------|-----------|---------|-------|-----------|-------|

## Bio Highlights
Top 5 candidates — summarized bios:
1. @[handle]: "[bio excerpt]" — [tech signals]

故障排除

结果全是公司而非个人:添加 "-company -official -team -agency" 作为排除搜索词,或按简介中的第一人称代词进行筛选。 技术栈过于常见,导致结果太多:添加第二个筛选条件——位置或资历级别——将结果缩减到可管理的范围。 开放求职信号较少:大多数被动候选人不会公开表明求职意向;重点联系 passive 级别的候选人,并在个性化消息中提及他们近期发布的推文。

评论

支持 Markdown