2 个不稳定版本

0.2.0 2022年8月10日
0.1.0 2022年7月12日

#909 in 数据库接口


memory-lol-client 中使用

自定义许可证

41KB
767

memory.lol

Rust build status Coverage status

概述

本项目是一个小型网络服务,提供社交媒体账户的历史信息。

目前可用于查找4.43亿个Twitter账户的5.42亿个历史昵称。大部分数据都是从Twitter Stream GrabWayback Machine(均由互联网档案馆发布)抓取的。

覆盖范围应相当良好(对于非受保护账户),可以追溯到2011年,当时Twitter Stream Grab启动。

请注意,此软件不是“开源”的,但源代码可供个人、非营利组织和企业主使用和修改(有关详细信息,请参阅下面的许可证部分)。

安全性

此服务提供的信息已从公共档案馆收集,在大多数情况下,可以通过其他方式轻松找到(例如,通过搜索某个账户的回复的Twitter搜索)。该服务旨在使研究人员或记者更容易确定进一步调查的方向,更普遍地提醒用户某个账户可能在进行诈骗、传播虚假信息等。如果您对安全或隐私有疑虑,可以通过Twitter DM电子邮件联系我,您的请求将得到私密处理。

当前访问限制

在大多数情况下,当前对工具的公开访问仅限于过去60天内观察到的历史事实。有两个例外

完整的十二年半和五亿个昵称(减去请求排除的昵称)可供一群受信任的研究人员、记者和活动家使用。

该服务目前支持通过GitHub或Google账户进行身份验证。

该服务仅使用GitHub(或Google)进行身份验证,不需要对用户账户进行任何非公开或写访问,永远不会请求任何类型的密码,并且仅在服务器上存储用户的公开信息。

服务目前不会以允许任何有权访问服务器的人将个别查询链接到特定授权用户的方式记录请求,但如果出现滥用建议,我保留在未来实施此类记录的权利。

要登录,请访问 https://api.memory.lol/v1/login/github,这将带您进入GitHub“授权memory.lol”页面,该页面将要求您授权“有限访问您的公开数据”。点击“授权”,您将被带到显示您当前访问级别(除非您的账户已特别批准访问,否则将显示为空)的状态URL。从那里,完整的索引将可用(如果您的账户已获批准)。

要登出,请访问 https://api.memory.lol/v1/logout

可以通过GitHub的设备流程从命令行使用服务的完整版本,但这目前并不方便(请参阅下面的说明)。我将提供一个使命令行使用更简单的客户端。

如果您有兴趣让您的账户获得非日期限制的访问权限,请与我联系。

用例

在社交媒体平台上发表仇恨言论、诈骗、骚扰等行为的账户有时会通过更改昵称来掩盖自己的身份,他们通常也有非常糟糕的操作安全措施(例如,在打算匿名使用的账户中使用真实姓名或其他识别信息)。

能够查找历史社交媒体资料通常可以使人们能够识别这些人的离线身份(或者至少追踪他们活动之间的联系)。

以下是我脑海中想到的一些例子(前三个是服务作用的例子,最后两个展示了如何用它来证实他人的工作)

  • @OSINT_Ukraine:2022年2月获得了大量关注;查找旧昵称显示它之前是一个NFT诈骗账户。
  • @libsoftiktok:一个针对LGBTQ+人群的病毒性仇恨账户;在这个服务中查找她的昵称是我几个月前找到她名字(Chaya Raichik)的方式。
  • @_lktk:一个在Scala社区活跃多年的具有性别歧视倾向的恶棍Iratxo Lorca;使用此服务确定他是第一个使用此服务的人。
  • @Mormonger:一个被识别为Cole Noorda的同性恋摩门教徒;此服务确认他之前曾使用昵称@colenoorda为其账户。
  • @_14words_:今年早些时候被识别为白人至上主义者伊利诺伊州警察艾伦·P·尼科尔斯的账户;这项服务将此账户与屏幕名称 @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 令牌(将下面的 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、屏幕名和以纪元秒为单位的观察时间)。

未来

关于Web服务的任何内容都可能在任何时候更改,包括其可用性。

存在一些非公开端点,我可能在某个时候将其开放。这些提供了完整的用户历史档案,有关挂起或停用状态的信息等。

服务条款遵从性

此Web服务仅为托管在公共存档中的内容索引提供一个接口,该项目旨在符合在生成此索引时访问的所有平台的《服务条款》。

此存储库不包含任何社交媒体平台的数据。

许可证

本软件根据反资本主义软件许可证(v. 1.4)发布。

依赖项

~30MB
~596K SLoC