在 Twitter 上寻找自由职业者与独立承包商
该技能通过技能关键词、作品集/项目信号以及开放接单标志,在 Twitter 上发现自由职业者与独立承包商。Twitter 上活跃着大量讨论自身专业的从业者,这是很强的被动候选人信号。
前置条件
- 设置 APIFY_TOKEN 环境变量
- 可选:安装 Apify MCP 服务器
输入参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| startUrls | 数组 | 可选 | [] | Twitter 个人资料或推文 URL |
| twitterHandles | 数组 | 可选 | [] | Twitter 用户名(不含 @) |
| twitterUserIds | 数组 | 可选 | [] | Twitter 用户 ID |
| getFollowers | 布尔 | 可选 | false | 抓取粉丝列表 |
| getFollowing | 布尔 | 可选 | false | 抓取关注列表 |
| getRetweeters | 布尔 | 可选 | false | 抓取某条推文的转发者 |
| includeUnavailableUsers | 布尔 | 可选 | false | 包含不可用/被封禁用户 |
| maxItems | 数字 | 可选 | 无限制 | 返回的最大用户数 |
| customMapFunction | 字符串 | 可选 | — | 用于转换每个输出对象的 JavaScript 函数 |
工作流
进度:
- [ ] 步骤 1:搜索特定角色的推文
- [ ] 步骤 2:收集唯一账号
- [ ] 步骤 3:丰富个人资料
- [ ] 步骤 4:给候选人匹配度打分
- [ ] 步骤 5:交付候选人名单
步骤 1:搜索查询
推荐使用 run_actor.js(自动处理等待、输出与文件保存):
# 快速回答(在聊天中打印表格)
node scripts/run_actor.js \
--actor "apidojo~twitter-user-scraper" \
--input '{"param": "value"}'
# 保存为 CSV
node scripts/run_actor.js \
--actor "apidojo~twitter-user-scraper" \
--input '{"param": "value"}' \
--output YYYY-MM-DD_results.csv --format csv
# 保存为 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 可用:
工具:apify:run-actor Actor:"apidojo~tweet-scraper" 输入:
{
"searchTerms": ["freelance [SKILL]", "[SKILL] for hire", "available for contract [SKILL]"],
"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": ["freelance [SKILL]", "[SKILL] for hire", "available for contract [SKILL]"], "maxItems": 300}'
从结果中收集唯一的 author.username。
步骤 2:丰富个人资料
如果 Apify MCP 可用:
工具:apify:run-actor Actor:"apidojo~twitter-user-scraper" 输入:{"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:筛选与打分
技能确认:个人简介包含关键词:"freelance"、"independent"、"for hire"、"consulting"、"contract"、"available"、"hire me"、"DM for work"
开放接单信号 = 个人简介或近期推文包含 'available'、'taking clients'、'open for projects'、'DM for rates'
候选人评分:
candidate_score = (skill_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:边界情况
- 结果中出现公司/品牌账号:筛选粉丝数 > 5 万且简介不含人称代词的账号,这些很可能是品牌账号
- 候选人数 < 20:放宽技能关键词;移除地点或资历过滤;尝试相邻技能
- 机器人检测:将粉丝数/关注数 < 0.05 且推文数 < 20 标记为潜在机器人
- 地点不匹配:简介地点是自由文本,使用模糊匹配,接受部分城市/国家名称
输出格式
# 自由职业者与独立承包商候选人:[FREELANCE_SKILL]
找到资料:[N] | 开放接单:[N] | 活跃:[N] | 日期:[DATE]
## 优先:开放接单候选人
| 姓名 | @账号 | 专长 | 地点 | 粉丝数 | 最近活跃 | 评分 |
|------|---------|----------|---------|-----------|------------|-------|
## 被动候选人
| 姓名 | @账号 | 专长 | 地点 | 粉丝数 | 评分 |
|------|---------|----------|---------|-----------|-------|
## 简介亮点(前 5)
1. @[handle]:"[简介摘录]"
故障排除
- 所有结果都是机构/公司而非个人:添加人称代词过滤,或搜索 "I am a [role]"、"I do [skill]"
- 角色太宽泛导致结果过多:添加地点或资历限定
- 没有开放接单信号:多数候选人不公开表态——把被动候选人当作温暖线索,结合其近期内容进行个性化外联