2个不稳定版本
0.2.0 | 2022年8月10日 |
---|---|
0.1.0 | 2022年7月12日 |
#300 在 压缩
61KB
896 行
memory.lol
概述
本项目是一个提供社交媒体账户历史信息的微小网络服务。
目前它可以用来查询4.43亿Twitter账户的5.42亿历史昵称。这些数据大部分是从Twitter Stream Grab或Wayback Machine(两者均由互联网档案馆发布)抓取的。
从2011年开始,即Twitter Stream Grab启动时,该服务的覆盖范围应该相当好(对于非受保护账户)。
请注意,此软件不是"开源",但源代码可供个人、非营利组织和企业主使用和修改(有关详细信息,请参阅下面的许可证部分)。
安全性
此服务提供的信息已全部从公开档案中收集,在大多数情况下,可以通过其他方式轻松找到(例如,通过Twitter搜索账户的回复)。该服务的目标是使研究人员或记者更容易确定进一步调查的方向,更普遍地提示用户,账户可能在进行欺诈、传播虚假信息等。如果您对安全或隐私有疑虑,可以通过Twitter私信或电子邮件联系我,您的请求将被私下处理。
当前访问限制
在大多数情况下,目前该工具的公开访问仅限于过去60天内观察到的历史事实。有两个例外
- 某些账户应账户所有者的要求被排除。
- 为从几个“恶意行为者”列表中编译的一组账户提供完整历史记录。
完整的12年半和5亿个昵称(减去请求排除)可供一群信任的研究人员、记者和活动家使用。
该服务目前支持通过GitHub或Google账户进行身份验证。
该服务仅使用GitHub(或Google)进行身份验证,不需要对用户的非公开或写访问权限,永远不会要求任何类型的密码,并且仅在服务器上存储用户的公开信息。
当前服务没有以允许任何有权访问服务器的人将单个查询链接到特定授权用户的方式记录请求,但我保留在未来如有滥用建议实施此类记录的权利。
要登录,请访问https://api.memory.lol/v1/login/github
,这将带您进入GitHub的“授权memory.lol”页面,要求您授权“有限访问您的公开数据”。点击“授权”,您将被带到状态URL,该URL将显示您当前的访问级别(除非您的账户已特别批准访问,否则将为空)。从那里您可以访问完整的索引(如果您的账户已被批准)。
要登出,请访问https://api.memory.lol/v1/logout
。
您可以通过GitHub的设备流程在命令行中使用服务的完整版本,但这目前并不方便(见下文说明)。我将提供一个使命令行使用更简单的客户端。
如果您希望您的账户获得非日期限制的访问批准,请与我联系。
用例
在社交媒体平台上参与仇恨言论、诈骗、骚扰等活动的一些账户有时会通过更改屏幕名来隐藏他们的身份,他们通常也有非常糟糕的操作安全(例如在后来打算匿名使用的账户上使用真实姓名或其他识别信息)。
能够查找历史社交媒体资料通常可以使人能够识别这些人的离线身份(或至少追踪他们活动之间的联系)。
以下是我脑海中的一些例子(前三个是服务操作的例子,最后两个展示了如何用它来确认他人的工作)
@OSINT_Ukraine
:2022年2月获得大量关注;查找旧屏幕名显示它之前是一个NFT骗局账户。@libsoftiktok
:一个针对LGBTQ+人群的病毒性仇恨账户;在这个服务中查找她的屏幕名是我几个月前找到她的名字(Chaya Raichik)的方式。@_lktk
:一个名叫Iratxo Lorca的恶毒跨性别厌恶者,他在Scala社区活跃了多年;他是使用此服务识别的第一批人之一。@Mormonger
:一个反同的摩门教徒,去年9月被识别为名叫Cole Noorda的人;此服务确认他之前曾使用屏幕名@colenoorda
为其账户。@_14words_
:今年早些时候被识别为白人至上主义者伊利诺伊州警察Aaron P. Nichols的账户;此服务将该账户与屏幕名@spd584
联系起来。
在许多情况下,服务提供的信息不足以识别一个人,但可能提供一些线索,说明下一步该去哪里查找(例如,通过✨cancel-culture✨查找旧的用户名通常是一个合理的第二步)。
详细示例
如果您在浏览器中访问https://api.memory.lol/v1/tw/libsoftiktok
,您将看到以下数据
{
"accounts": [
{
"id": 1326229737551912960,
"screen-names": {
"chayaraichik": null,
"cuomomustgo": null,
"houseplantpotus": null,
"shaya69830552": [
"2020-11-10"
],
"shaya_ray": [
"2020-11-27",
"2020-12-17"
],
"libsoftiktok": [
"2021-08-18",
"2022-06-16"
]
}
}
]
}
请注意,对于某些用户名,我们目前没有关于它们何时被观察到的信息(例如,上面带有null
值的那些)。如果一个用户名在我们的数据集中只在一个日期被观察到,将只有一个日期。如果有两个日期,它们表示该用户名首次和最后被观察到的日期。
这些日期范围通常不会代表用户名被使用的整个时间(它们只是表示该用户名在我们的数据集中出现的时间)。
其他功能
该服务非常基础。它支持的少数功能之一是通过逗号分隔的列表查询多个用户名(例如:https://api.memory.lol/v1/tw/jr_majewski,MayraFlores2022
)。它还支持搜索用户名前缀(目前限制为100个结果;例如:https://api.memory.lol/v1/tw/tradwife*
)。
目前它只支持JSON输出,但如果您需要电子表格,例如,您可以使用像gojq这样的工具将JSON转换为CSV
$ curl -s https://api.memory.lol/v1/tw/jr_majewski,MayraFlores2022 |
> gojq -r '.[].accounts | .[] | .id as $id | ."screen-names" | keys | [$id] + . | @csv'
89469296,"LaRepublicana86","MayraFlores2022","MayraNohemiF"
726873022603362304,"JRMajewski","jr_majewski"
1533878962455293953,"jr_majewski"
或者如果您希望每行只有一个用户名
$ curl -s https://api.memory.lol/v1/tw/jr_majewski,MayraFlores2022 |
> gojq -r '.[].accounts | .[] | .id as $id | ."screen-names" | keys | .[] | [$id, .] | @csv'
89469296,"LaRepublicana86"
89469296,"MayraFlores2022"
89469296,"MayraNohemiF"
726873022603362304,"JRMajewski"
726873022603362304,"jr_majewski"
1533878962455293953,"jr_majewski"
请注意,用户名查询不区分大小写,但结果区分大小写(这可以用于像Archive Today这样的存档,它只提供区分大小写的搜索)。
其他端点
您还可以通过账号ID查找账号的历史记录(例如:https://api.memory.lol/v1/tw/id/1326229737551912960
也显示了Raichik的账号的用户名)。
通过设备流授权访问
如果您想从命令行访问完整的索引,目前有几个步骤。默认情况下,您将收到日期限制的结果
$ curl -s https://api.memory.lol/v1/tw/USForcesKorea | jq
{
"accounts": [
{
"id": 4749974413,
"id_str": "4749974413",
"screen_names": {
"USForcesKorea": [
"2018-06-08",
"2022-07-29"
]
}
}
]
}
要访问完整的索引(假设您有一个已批准的账号),您首先需要获取设备代码和用户代码,使用以下命令
$ curl -X POST -d 'client_id=b8ab5a8c1a2745d514b7' https://github.com/login/device/code
device_code=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&expires_in=898&interval=5&user_code=ABCD-0123&verification_uri=https%3A%2F%2Fgithub.com%2Flogin%2Fdevice
接下来,在浏览器中访问https://github.com/login/device
,并在提示时输入您刚才收到的用户代码。
最后,您需要获取您的bearer token(将下面的device_code
替换为您收到的代码,但再次使用这里显示的client_id
)
$ curl -X POST -d 'device_code=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&client_id=b8ab5a8c1a2745d514b7&grant_type=urn:ietf:params:oauth:grant-type:device_code' https://github.com/login/oauth/access_token
access_token=gho_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&scope=&token_type=bearer
然后您可以使用此令牌进行认证查询
$ curl -s -X POST -d 'token=gho_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' https://api.memory.lol/v1/tw/USForcesKorea | jq
{
"accounts": [
{
"id": 26847645,
"id_str": "26847645",
"screen_names": {
"USFKPAO": [
"2011-10-19",
"2016-06-19"
],
"usforceskorea": [
"2017-02-20",
"2018-03-27"
]
}
},
{
"id": 4749974413,
"id_str": "4749974413",
"screen_names": {
"usforceskorea": [
"2016-02-26",
"2017-02-07"
],
"usforceskorea_": [
"2017-02-19",
"2018-04-24"
],
"USForcesKorea": [
"2018-06-08",
"2022-07-29"
]
}
}
]
}
最终,此过程将被集成到一个命令行客户端中,但到目前为止,这种方法可以与现有的工具(如curl
)一起使用。
导入数据
该应用目前支持两种文件格式的数据导入。第一个需要一个Twitter用户对象 每行(以JSON格式,并包含一个表示观察时间的额外snapshot
字段,作为纪元秒)。第二种是一个至少有三个列的CSV格式(Twitter用户ID、用户名和观察时间的纪元秒)。
未来
关于网络服务的任何内容都可能在任何时间进行更改,包括其可用性。
存在一些非公开端点,我可能在某个时刻开放它们。这些端点提供完整的历史用户资料,有关暂停或停用状态的信息等。
服务条款合规性
该网络服务仅为托管在公开存档中的内容的索引提供接口,该项目旨在符合生成此索引时访问的所有平台的《服务条款》。
此存储库不包含任何社交媒体平台的数据。
许可证
此软件在《反资本主义软件许可证》下发布(版本 1.4)(v. 1.4)。
依赖项
~31–48MB
~830K SLoC