11function Get-TwitterOAuthSettings {
22
33 [CmdletBinding ()]
4- Param ($Resource , $AccessToken )
4+ Param ($Resource , $AccessToken , [ switch ] $Quiet )
55
66 If ($Resource ) {
77
8- $AccessToken = $Script :OAuthCollection.RateLimitStatus |
9- Where-Object { $_.resource -eq " /$Resource " } |
10- Sort-Object @ {expression = " remaining" ;Descending = $true }, @ {expression = " reset" ;Ascending = $true } |
11- Select-Object - First 1 - Expand AccessToken
8+ # Get the next available OAuth with available resources
9+ $RateLimitStatus = $Script :OAuthCollection.RateLimitStatus |
10+ Where-Object { $_.resource -eq " $Resource " } |
11+ Sort-Object @ {expression = " remaining" ;Descending = $true }, @ {expression = " reset" ;Ascending = $true } |
12+ Select-Object - First 1 |
13+ ForEach-Object { $_.remaining += -1 ; Return $_ }
14+
15+ Write-Verbose " resource: $ ( $RateLimitStatus.resource ) , limit: $ ( $RateLimitStatus.limit ) , remaining: $ ( $RateLimitStatus.remaining ) , reset: $ ( $RateLimitStatus.reset ) "
1216
13- }
17+ $AccessToken = $RateLimitStatus .AccessToken
1418
15- If ($AccessToken ) {
19+ If ($RateLimitStatus .remaining -lt 0 ) {
1620
17- $OAuthSettings = $Script :OAuthCollection.Where ({$_.AccessToken -eq $AccessToken }) | Select-Object - First 1
21+ # Refresh the RateLimitStatus so we throttle an accurate value
22+ $OAuthSettings = $Script :OAuthCollection.Where ({$_.AccessToken -eq $AccessToken }) | Select-Object - First 1
23+ $OAuthSettings = Set-TwitterOAuthSettings - ApiKey $OAuthSettings.ApiKey - ApiSecret $OAuthSettings.ApiSecret - AccessToken $OAuthSettings.AccessToken - AccessTokenSecret $OAuthSettings.AccessTokenSecret - PassThru - Force
1824
19- } Else {
25+ $RateLimitStatus = $OAuthSettings.RateLimitStatus | Where-Object { $_.resource -eq " $Resource " } |
26+ ForEach-Object { $_.remaining += -1 ; Return $_ }
27+
28+ If ($RateLimitStatus.remaining -lt 0 ) {
29+
30+ # Throttle... you're going way too fast cowboy!
31+ $SleepSeconds = $RateLimitStatus.reset - (Get-Eposh ).TotalSeconds + 1
32+ Write-Warning " Throttling for ${SleepSeconds} seconds."
33+ Start-Sleep - Seconds $SleepSeconds
34+
35+ }
36+
37+ }
2038
21- $OAuthSettings = $Script :OAuthCollection | Get-Random
2239
2340 }
2441
42+
43+ If ($AccessToken ) {
44+ $OAuthSettings = $Script :OAuthCollection.Where ({$_.AccessToken -eq $AccessToken }) | Select-Object - First 1
45+ } Else {
46+ $OAuthSettings = $Script :OAuthCollection | Select-Object - First 1
47+ }
48+
49+
2550 If ($OAuthSettings ) {
2651 Write-Verbose " Using AccessToken '$ ( $OAuthSettings.AccessToken ) '"
2752 $OAuthSettings = @ {
@@ -30,11 +55,11 @@ function Get-TwitterOAuthSettings {
3055 AccessToken = $OAuthSettings.AccessToken
3156 AccessTokenSecret = $OAuthSettings.AccessTokenSecret
3257 }
33- } Else {
34- $OAuthSettings = $null
35- Write-Warning " No OAuthSettings was found. Use 'Set-TwitterOAuthSettings' to set PSTwitterAPI ApiKey & Token."
58+ Return $OAuthSettings
3659 }
3760
38- Return $OAuthSettings
61+ If ($Quiet.IsPresent -eq $false ) {
62+ Throw " No OAuthSettings was found. Use 'Set-TwitterOAuthSettings' to set PSTwitterAPI ApiKey & Token."
63+ }
3964
4065}
0 commit comments