当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 如何自动化 Twitter 关注

作者:精品下载站 日期:2024-12-14 20:53:16 浏览:15 分类:玩电脑

如何自动化 Twitter 关注


你有用Twitter吗?如果没有,你就错过了。 Twitter 是跟上科技快节奏的最佳社交媒体平台。但推特上有数百万人。如何追踪有趣的人?在本文中,我将向您展示如何进行操作并使其自动化!

在 Twitter 上发现有趣的人有很多不同的方法。您会发现许多不同的工具和服务可以帮助您,但它们并不完美。有些是付费服务,有些是损坏的,有些没有您正在寻找的功能。

您知道您可以创建自己的工具,而不是使用一些花哨的服务吗?如果您有一点 PowerShell 知识,您可以轻松地自己查询 Twitter 的 API 并发现您想要的所有 Twitter 用户。但如何呢?

由于您可以通过多种不同的方式发现有趣的 Twitter 用户,因此本文将尝试分三个步骤解决这个问题:

  1. 查找您认为“有趣”的热门 Twitter 帐户的所有关注者。您已经关注了哪些拥有大量关注者的人,并且您认为这些人会发布相同的一般类型的内容?
  2. 按属性过滤潜在关注者,例如个人资料中的单词、没有默认个人资料图片、没有受保护的 Twitter 帐户等。
  3. 跟踪所有找到的屏幕名称。

最棒的是,这一切都将通过脚本完成,因此它是 100% 自动化的,并且可以在您希望的任何时间再次运行。

先决条件

这个自动化 Twitter 关注项目将是一个实践演示。您将构建自己的脚本来查询 Twitter 并管理您的 Twitter 好友。如果您打算跟随,请确保您已准备好以下内容:

  • 一个推特帐户
  • 推特应用程序。您可以在 MyTwitter 博客文章中找到有关如何执行此操作的步骤。这是收集一些 API 密钥和访问令牌以对您的帐户进行身份验证所必需的。
  • Windows PowerShell 或 PowerShell 6+。本文中的示例在 Mac 上的 PowerShell v6.2 上运行。
  • 对 PowerShell 有一定的了解
  • Twitter 屏幕名称列表,其中包含您想要关注的关注者类型。本文将使用另一个 Twitter 帐户的关注者“播种”初始名单。

设置自动化 Twitter 跟踪脚本

要执行身份验证和进行 API 调用等繁重工作,您将首先依赖 Marc Kellerman 的 PSTwitterAPI PowerShell 模块。这是一个方便的模块,将 PowerShell 包装在各种 Twitter API 函数周围。

安装 PSTwitterAPI 模块

继续从 PowerShell 库下载并安装此模块,如下所示。

PS62> Install-Module -Name PSTwitterAPI

查找 API 密钥和令牌

安装后,您需要提供 Twitter 应用程序为您提供的四项重要信息:

  • API密钥
  • API秘密
  • 访问令牌
  • 访问令牌秘密

您可以在 Twitter 应用程序下的“密钥和令牌”部分找到这些关键属性,如下所示。

[玩转系统] 如何自动化 Twitter 关注

将 OAuth 密钥和令牌传递给 PSTwitterAPI

一旦您有权访问这四个项目中的每一个,就可以使用 Set-TwitterOAuthSettings cmdlet 将它们传递到 PSTwitterAPI 模块。为此,请调用 cmdlet,将每个值传递给适当的参数,如下所示。

$OAuthSettings = @{
     ApiKey            = 'xxxxxx'
     ApiSecret         = 'xxxxxx'
     AccessToken       = 'xxxxxx'
     AccessTokenSecret = 'xxxxxx'
}
Set-TwitterOAuthSettings @OAuthSettings

构建实用功能

查询 API 时,您在尝试自动关注 Twitter 用户时无疑会遇到速率限制。您在给定时间内只能执行一定数量的请求。您可以在此处阅读有关 Twitter API 速率限制的更多信息。

为了管理查询速率受限的情况,我创建了两个名为 Get-FriendlyApiErrorResponseTest-ApiRateLimitResponse 的函数。这两个 PowerShell 函数并没有(故意)做很多事情,但只做好一件事。它们使用户不必担心抛出的特定错误或做出的决定。

function Get-FriendlyApiErrorResponse {
    param(
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.Management.Automation.ErrorRecord]$ErrorResponse
    )
    if ($ErrorResponse.Exception.Message -match 'You are unable to follow more people at this time') {
        $ErrorResponse.Exception.Message
    } else {
        ($ErrorResponse.ErrorDetails.Message | ConvertFrom-Json).errors.message
    }
}

function Test-ApiRateLimitResponse {
    param(
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [string]$ErrorResponse
    )

    $ErrorResponse -match '(Too many requests)|(Rate limit exceeded)'
}

此外,由于有时会受到速率限制,因此了解脚本何时尝试再次运行会很方便。下面您将看到执行此操作的 Show-Countdown 函数。

function Show-Countdown {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [int]$MaxWaitMin
    )

    $timer =  [system.diagnostics.stopwatch]::StartNew()
    do {
        $totalMinsWaited =  [math]::Round($timer.Elapsed.TotalMinutes, 0)
        Write-Host "$($MaxWaitMin - $totalMinsWaited)..." -NoNewline
        Start-Sleep -Seconds 60
    } while ($timer.Elapsed.TotalMinutes -lt $MaxWaitMin)

    $timer.Stop()
}

增加“种子”Twitter 好友

与其搜索整个 Twitter 世界,不如首先从潜在 Twitter 好友的“种子”列表开始。一种方法是首先手动定义一个或多个志同道合的 Twitter 用户。

  • 您喜欢在 Twitter 上关注什么类型的人?
  • 哪些类型的人可能拥有可能发布有趣内容的关注者?

定义热门 Twitter 用户

在 PowerShell 数组中创建这些人员的列表。您将询问他们的每个关注者。

建议不要在此列表中添加数十或数百个 Twitter 屏幕名称。除了创建令人难以承受的时间表之外,您还将遇到大量 Twitter 的 API 限制!

$interestingUsers = @('user1','user2','user3')

定义有趣的关键词

接下来,要过滤潜在的 Twitter 好友,甚至可以定义您希望在他们的个人资料中显示的单词列表。尝试想出一些他们可能会放在个人资料中的通用词,作为他们的兴趣或简历的一部分。

下面你会找到我的一些关键词。

$profileDescKeywords = @('sccm', 'powershell', 'engineer', 'azure', 'cloud', 'devops')

查询Twitter关注者

此时,是时候查询每个“有趣”用户的所有关注者了。由于您可能有多个用户需要查询关注者,因此请创建一个循环,如下所示。

$followers = @()
foreach ($user in $interestingUsers) {

}

在 foreach 循环内部,您需要放置一个 do/while 循环。由于 Twitter API 的响应方式,这是必要的。不幸的是,如果该帐户有超过 200 个关注者,您将不得不多次轮询 API。这个 do/while 循环会为你管理这个。

在 do/while 循环内部,使用 Get-TwitterFollowers_List 函数。该函数将轮询 Twitter 的 API 并拉下 200 名或更少的关注者。

您可以在下面看到一个示例,说明如何在必要时使用注释来实现此逻辑。此代码汇集了之前构建的函数,向您展示如何使用它们。

do {
    try {
        $getFollowParams = @{
            ErrorAction = 'Stop'
            count       = 200
        }
        $getFollowParams.screen_name = $user
        if (Get-Variable -Name 'response' -ErrorAction 'Ignore') {
            $getFollowParams.cursor = $response.next_cursor
        }
        if ($response = Get-TwitterFollowers_List @getFollowParams) {
            Write-Verbose -Message "Get-TwitterFollowers: Retrieved $($response.users.Count) followers from user $ScreenName..."
            $response.users
            
        }
    } catch {
        $errResponse = Get-FriendlyApiErrorResponse -ErrorResponse $_
        if (Test-ApiRateLimitResponse -ErrorResponse $errResponse) {
            Write-Warning "Hit API rate limit. Waiting $RetryInterval minutes..."
            Show-Countdown -MaxWaitMin $RetryInterval
        } else {
            throw $errResponse
        }
    }
} while ($response.next_cursor)

我已将所有这些代码包装到下面一个名为 Get-TwitterFollowers 的函数中。这是自动 Twitter 关注模块中的第一个功能!

function Get-TwitterFollowers {
    [CmdletBinding()]
    param
    (
        [Parameter()]
        [ValidateNotNullOrEmpty()]
        [string]$ScreenName,

        [Parameter()]
        [ValidateNotNullOrEmpty()]
        [int]$RetryInterval = 15
    )

    do {
        try {
            $getFollowParams = @{
                ErrorAction = 'Stop'
                count       = 200
            }
            if ($PSBoundParameters.ContainsKey('ScreenName')) {
                $getFollowParams.screen_name = $ScreenName
            }
            if (Get-Variable -Name 'response' -ErrorAction 'Ignore') {
                $getFollowParams.cursor = $response.next_cursor
            }
            if ($response = Get-TwitterFollowers_List @getFollowParams) {
                Write-Verbose -Message "Get-TwitterFollowers: Retrieved $($response.users.Count) followers from user $ScreenName..."
                $response.users
                
            }
        } catch {
            $errResponse = Get-FriendlyApiErrorResponse -ErrorResponse $_
            if (Test-ApiRateLimitResponse -ErrorResponse $errResponse) {
                Write-Host "Hit API rate limit. Waiting $RetryInterval minutes..."
                Show-Countdown -MaxWaitMin $RetryInterval
            } else {
                throw $errResponse
            }
        }
    } while ($response.next_cursor)
}

自动关注 Twitter 帐户

您需要执行的最后一项任务是关注帐户。为了使该过程尽可能简单地考虑 API 速率限制,您可以查看执行此操作的函数示例。

这个函数称为 Follow-TwitterUser,将联系 Twitter 并尝试关注帐户。如果请求受到速率限制,它将在特定时间段内暂停并重试,最多可达 $MaxRetries

function Follow-TwitterUser {
    [CmdletBinding()]
    param
    (
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [string]$ScreenName,

        [Parameter()]
        [ValidateNotNullOrEmpty()]
        [int]$RetryInterval = 15, ## minutes

        [Parameter()]
        [ValidateNotNullOrEmpty()]
        [int]$MaxRetries = 5
    )

    $retriesPerformed = 0
    $success = $false
    do {
        try {
            $followParams = @{
                ErrorAction = 'Stop'
                screen_name = $ScreenName
            }
            Write-Verbose -Message "Attempting to follow screen name $ScreenName..."
            $response = Send-TwitterFriendships_Create @followParams
            Write-Verbose -Message 'Successfully followed user.'
            $success = $true
        } catch {
            $errResponse = Get-FriendlyApiErrorResponse -ErrorResponse $_
            if (Test-ApiRateLimitResponse -ErrorResponse $errResponse) {
                $retriesPerformed++
                if ($retriesPerformed -le $MaxRetries) {
                    Write-Warning "Hit API rate limit. Waiting $RetryInterval minutes..."
                    Show-Countdown -MaxWaitMin $RetryInterval
                } else {
                    throw $errResponse
                }
            } else {
                throw $errResponse
            }
        }
    } while (-not $success)
}

根据个人资料关键字过滤用户

可能会有很多“垃圾”和垃圾邮件 Twitter 帐户关注您的种子帐户。为了确保您不关注这些帐户,请添加另一层过滤。

您可以使用许多不同的标准来过滤掉这些帐户。在本文中,您将看到六个不同的项目。为了让我关注帐户,该帐户必须满足以下要求:

  1. 必须关注“种子”Twitter 帐户
  2. 不受保护意味着您必须获得许可才能遵循它
  3. 我没有关注他们
  4. 已定义配置文件
  5. 他们的个人资料中至少有一个有趣的关键词。请记住您之前定义的名为 $profileDescKeywords 的数组。这就是它派上用场的地方。
  6. 没有默认的个人资料图片

关注 Twitter 用户

Get-TwitterFollowers 函数返回指定帐户的所有关注者,但它不应用上面定义的任何过滤器。下面您将看到一些已完成的过滤的示例。

您还会注意到上面定义的 Follow-TwitterUser 函数。此代码尝试根据过滤条件查找帐户的关注者并关注每个用户。

Get-TwitterFollowers -ScreenName $user -Verbose:$VerbosePreference | where {
    $desc = $_.description;
    -not $_.protected -and ## is not a protected account
    -not $_.following -and ## I am not following them already
    -not $_.followed_by -and ## They are not following me
    $_.description -and ## They have a profile
    $_.profile_image_url -notmatch 'default_profile_images' -and ## They don't have a default profilate image
    ($profileDescKeywords | ? { $desc -match $_ }) -and ## They have at least one interesting word in their profile
    $_.screen_name -notin $NeverFollow
} | foreach {
    Follow-TwitterUser -ScreenName $_.screen_name -Verbose:$VerbosePreference
}

如果您想下载并修改为此项目创建的脚本,可以通过 Github 进行。

在有人对这段代码及其效率大喊大叫之前,我将第一个告诉你这只是一个有趣的项目。它绝不是我所说的“专业”代码的代表,而是为了我的目的而完成的工作。

挑战

在本文中,您了解了构建自己的 Twitter 发现工具的具体细节。你怎样才能让它变得更好?从您在这里看到的代码中,可以构建一个很棒的 PowerShell 模块!为什么不构建一个、改进此代码并在 GitHub 和 PowerShell Gallery 上共享它呢?

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯