Ps Twitter Api

Problem this snippet solves:

Here is a set of PowerShell functions that give access to the Twitter web based APIs allowing you to interact with the Twitter service from within Windows PowerShell.

How to use this snippet:

Twitter Functions

Internal Helpers

function Shrink-Url()
function Shrink-Links()
function Set-TwitterCredentials()
function Get-TwitterCredentials()
function Execute-HTTPGetCommand()
function Execute-HTTPPostCommand()
function Process-TwitterStatus()

Status

function Get-TwitterPublicTimeline()
function Get-TwitterFriendsTimeline()
function Get-TwitterUserTimeline()
function Get-TwitterStatus()
function Set-TwitterStatus()
function Get-TwitterReplies()
function Destroy-TwitterStatus()

User

function Process-TwitterUsers()
function Get-TwitterFriends()
function Get-TwitterFollowers()
function Get-TwitterUser()

Direct Messages

function Process-TwitterDirectMessages()
function Get-TwitterDirectMessages()
function Get-TwitterSentDirectMessages()
function New-TwitterDirectMessage()
function Destroy-TwitterDirectMessage()

Friendship

function Get-TwitterFriendshipExists
function Process-Ids()
function Get-TwitterSocialGraphFriendIds()
function Get-TwitterSocialGraphFollowerIds()

Account

function Is-ValidHexColor()
function Verify-TwitterCredentials()
function End-TwitterSession()
function Set-TwitterDeliveryDevice()
function Set-TwitterProfileColors()
function Set-TwitterProfileImage()
function Set-TwitterProfileBackgroundImage()
function Get-TwitterRateLimitStatus()
function Set-TwitterProfile()

Favorites

function Get-TwitterFavorites()
function Create-TwitterFavorite()
function Destroy-TwitterFavorite()

Notification

function Follow-TwitterUser()
function Leave-TwitterUser()

Block

function Create-TwitterBlock()
function Destroy-TwitterBlock()

Help

function Get-TwitterHelpTest()
function Get-TwitterDowntimeSchedule()

3rd Party Services

function Get-TwitterCounterStats()
function Get-GroupMemberList()

Code :

#----------------------------------------------------------------------------
# The contents of this file are subject to the "END USER LICENSE AGREEMENT 
# FOR F5 Software Development Kit for iControl"; you may not use this file 
# except in compliance with the License. The License is included in the 
# iControl Software Development Kit.
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
# the License for the specific language governing rights and limitations
# under the License.
#
# The Original Code is iControl Code and related documentation
# distributed by F5.
#
# The Initial Developer of the Original Code is F5 Networks,
# Inc. Seattle, WA, USA. Portions created by F5 are Copyright (C) 1996-2008 
# F5 Networks, Inc. All Rights Reserved.  iControl (TM) is a registered 
# trademark of F5 Networks, Inc.
#
# Alternatively, the contents of this file may be used under the terms
# of the GNU General Public License (the "GPL"), in which case the
# provisions of GPL are applicable instead of those above.  If you wish
# to allow use of your version of this file only under the terms of the
# GPL and not to allow others to use your version of this file under the
# License, indicate your decision by deleting the provisions above and
# replace them with the notice and other provisions required by the GPL.
# If you do not delete the provisions above, a recipient may use your
# version of this file under either the License or the GPL.
#----------------------------------------------------------------------------
[void] [Reflection.Assembly]::LoadWithPartialName("System.Web") 
[void] [Reflection.Assembly]::LoadWithPartialName("System.Text") 
[System.Net.ServicePointManager]::Expect100Continue = $false;

$script:g_creds = $null;
#============================================================================
# Shared Functions
#============================================================================
#----------------------------------------------------------------------------
# function Shrink-Url
#----------------------------------------------------------------------------
function Shrink-Url()
{
  param([string]$longurl = $null, [string]$provider = "tinyurl");
  $shorturl = $null;
  if ( $longurl )
  {
    switch ($provider.ToLower())
    {
      "is.gd" {
        $shorturl = Execute-HTTPGetCommand "http://is.gd/api.php?longurl=$longurl";
      }
      "tinyurl" {
        $shorturl = Execute-HTTPGetCommand "http://tinyurl.com/api-create.php?url=$longurl";
      }
      "snipurl" {
        $shorturl = Execute-HTTPGetCommand "http://snipurl.com/site/snip?r=simple&link=$longurl";
      }
      default {
        $shorturl = Execute-HTTPGetCommand "http://tinyurl.com/api-create.php?url=$longurl";
      }
    }
  }
  $shorturl;
}

#----------------------------------------------------------------------------
# function Shrink-Links
#----------------------------------------------------------------------------
function Shrink-Links()
{
  param([string]$text = $null, [string]$provider = "tinyurl");

  [regex]$regex="(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?"

  if ($text -match $regex)
  {
    $link = $matches[0]
  }
  
  #if an embedded url was found, convert it to a shortened link
  if ($link)
  {
    $shrunklink = Shrink-Url $link
    $text = $text.Replace($link, $shrunklink)
  }
  $text;
}

#----------------------------------------------------------------------------
# function Set-TwitterCredentials
#----------------------------------------------------------------------------
function Set-TwitterCredentials()
{
  param([string]$user = $null, [string]$pass = $null);
  if ( $user -and $pass )
  {
    $script:g_creds = New-Object System.Net.NetworkCredential -argumentList ($user, $pass);
  }
  else
  {
    $creds = Get-TwitterCredentials;
  }
}

#----------------------------------------------------------------------------
# function Get-TwitterCredentials
#----------------------------------------------------------------------------
function Get-TwitterCredentials()
{
  if ( $null -eq $g_creds )
  {
    trap { Write-Error "ERROR: You must enter your Twitter credentials for PoshTweet to work!"; continue; }
    $c = Get-Credential
    if ( $c )
    {
      $user = $c.GetNetworkCredential().Username;
      $pass = $c.GetNetworkCredential().Password;
      $script:g_creds = New-Object System.Net.NetworkCredential -argumentList ($user, $pass);
    }
  }
  $script:g_creds;
}

#----------------------------------------------------------------------------
# function Execute-HTTPGetCommand
#----------------------------------------------------------------------------
function Execute-HTTPGetCommand()
{
  param([string] $url = $null);
  if ( $url )
  {
    [System.Net.WebClient]$webClient = New-Object System.Net.WebClient
    if ( $url.ToLower().Contains("twitter.com") )
    {
      $webClient.Credentials = Get-TwitterCredentials
    }
  
    [System.IO.Stream]$stream = $webClient.OpenRead($url);
    [System.IO.StreamReader]$sr = New-Object System.IO.StreamReader -argumentList $stream;
    [string]$results = $sr.ReadToEnd();
    $results;
  }
}

#----------------------------------------------------------------------------
# function Execute-HTTPPostCommand
#----------------------------------------------------------------------------
function Execute-HTTPPostCommand()
{
  param([string] $url = $null, [string] $data = $null);

  if ( $url -and $data )
  {
    [System.Net.WebRequest]$webRequest = [System.Net.WebRequest]::Create($url);
    $webRequest.ServicePoint.Expect100Continue = $false;
    if ( $url.ToLower().Contains("twitter.com") )
    {
      $webRequest.Credentials = Get-TwitterCredentials
      $webRequest.PreAuthenticate = $true;
    }
    $webRequest.ContentType = "application/x-www-form-urlencoded";
    $webRequest.Method = "POST";
    $webRequest.Headers.Add("X-Twitter-Client", "PoshTweet");
    $webRequest.Headers.Add("X-Twitter-Version", "1.0");
    $webRequest.Headers.Add("X-Twitter-URL", "http://devcentral.f5.com/s/poshtweet");
  
    [byte[]]$bytes = [System.Text.Encoding]::UTF8.GetBytes($data);
    $webRequest.ContentLength = $bytes.Length;
    [System.IO.Stream]$reqStream = $webRequest.GetRequestStream();
    $reqStream.Write($bytes, 0, $bytes.Length);
    $reqStream.Flush();
    [System.Net.WebResponse]$resp = $webRequest.GetResponse();
    $rs = $resp.GetResponseStream();
    [System.IO.StreamReader]$sr = New-Object System.IO.StreamReader -argumentList $rs;
    [string]$results = $sr.ReadToEnd();
    $results;
  }
}

#============================================================================
# Status Functions
#============================================================================
#----------------------------------------------------------------------------
# Helper functions
#----------------------------------------------------------------------------
function Process-TwitterStatus()
{
  param([string]$sxml = $null, [bool]$raw = $false);
  if ( $sxml )
  {
    if ( $raw )
    {
      $sxml;
    }
    else
    {
      [xml]$xml = $sxml;
      if ( $xml.statuses.status )
      {
        $stats = $xml.statuses.status;
      }
      elseif ($xml.status )
      {
        $stats = $xml.status;
      }
      $stats | Foreach-Object -process {
        $info = "by " + $_.user.screen_name + ", " + $_.created_at;
        if ( $_.source ) { $info = $info + " via " + $_.source; }
        if ( $_.in_reply_to_screen_name ) { $info = $info + " in reply to " + $_.in_reply_to_screen_name; }
        "-------------------------";
        $_.text;
        $info;
      };
      "-------------------------";
    }
  }
}

#----------------------------------------------------------------------------
# public_timeline
#----------------------------------------------------------------------------
function Get-TwitterPublicTimeline()
{
  param([bool]$raw = $false);
  $results = Execute-HTTPGetCommand "http://twitter.com/statuses/public_timeline.xml";
  Process-TwitterStatus $results $raw;
}

#----------------------------------------------------------------------------
# friends_timeline
#----------------------------------------------------------------------------
function Get-TwitterFriendsTimeline()
{
  param (
    [string]$since = $null, 
    [int]$since_id = $null,
    [int]$count = $null,
  [int]$page = $null,
    [bool]$raw = $false
  );
  if ( $since )
  {
    $args = "?since=$since";
  }
  if ( $since_id )
  {
    if ( $args ) { $args = "${args}&" } else { $args = "?" }
    $args = "${args}since_id=$since_id";
  }
  if ( $count )
  {
    if ( $args ) { $args = "${args}&" } else { $args = "?" }
    $args = "${args}count=$count";
  }
  if ( $page )
  {
    if ( $args ) { $args = "${args}&" } else { $args = "?" }
    $args = "${args}page=$page";
  }
  
  Write-Host "Requesting URI: http://twitter.com/statuses/friends_timeline.xml${args}";
  $results = Execute-HTTPGetCommand "http://twitter.com/statuses/friends_timeline.xml${args}";
  Process-TwitterStatus $results $raw
}

#----------------------------------------------------------------------------
#user_timeline
#----------------------------------------------------------------------------
function Get-TwitterUserTimeline()
{
  param([string]$username = $null, [bool]$raw = $false);
  if ( $username )
  {
    $username = "/$username";
  }
  $results = Execute-HTTPGetCommand "http://twitter.com/statuses/user_timeline$username.xml";
  Process-TwitterStatus $results $raw
}

#----------------------------------------------------------------------------
# show
#----------------------------------------------------------------------------
function Get-TwitterStatus()
{
  param([string]$id, [bool]$raw = $false);
  if ( $id )
  {
    $results = Execute-HTTPGetCommand "http://twitter.com/statuses/show/" + $id + ".xml";
    Process-TwitterStatus $results $raw;
  }
}

#----------------------------------------------------------------------------
# update
#----------------------------------------------------------------------------
function Set-TwitterStatus()
{
  param([string]$status, [int]$in_reply_to_status_id = $null, [bool]$raw = $false);
  $encstatus = [System.Web.HttpUtility]::UrlEncode("$status");

  $args = "status=$encstatus";
  if ( $in_reply_to_status_id )
  {
    $args += "&in_reply_to_status_id=${in_reply_to_status_id}";
  }
  $results = Execute-HTTPPostCommand "http://twitter.com/statuses/update.xml" $args;
  Process-TwitterStatus $results $raw;
}

#----------------------------------------------------------------------------
# replies
#----------------------------------------------------------------------------
function Get-TwitterReplies()
{
  param([bool]$raw = $false);
  $results = Execute-HTTPGetCommand "http://twitter.com/statuses/replies.xml";
  Process-TwitterStatus $results $raw;
}

#----------------------------------------------------------------------------
# destroy
#----------------------------------------------------------------------------
function Destroy-TwitterStatus()
{
  param([string]$id = $null);
  if ( $id )
  {
    Execute-HTTPPostCommand "http://twitter.com/statuses/destroy/$id.xml", "id=$id";
  }
}

#============================================================================
# User Functions
#============================================================================
#----------------------------------------------------------------------------
# Helper functions
#----------------------------------------------------------------------------
function Process-TwitterUsers()
{
  param([string]$sxml = $null, [bool]$raw = $false);
  if ( $sxml )
  {
    if ( $raw )
    {
      $sxml;
    }
    else
    {
      [xml]$xml = $sxml;
      if ( $xml.users.user )
      {
        $user = $xml.users.user;
      }
      elseif ($xml.user )
      {
        $user = $xml.user;
      }
      $user | Foreach-Object -process {
        $id = $_.id;
        $screen_name = $_.screen_name;
        $name = $_.name;
        $desc = $_.description;
        $url = $_.url;
        $followers_count = $_.followers_count;
        $last_status = $_.status.text;
        
        "-------------------------";
        "$screen_name / $name (# $id , $followers_count followers) / $url";
        "Bio: $desc";
        "Tweet: $last_status";
      };
      "-------------------------";
    }
  }
}

#----------------------------------------------------------------------------
# friends
#----------------------------------------------------------------------------
function Get-TwitterFriends()
{
  param([string]$id_or_screenname, [string]$page = $null, [bool]$raw = $false);
  if ( $id_or_screenname )
  {
    $id_or_screenname = "/$id_or_screenname";
  }
  if ( $page )
  {
    $page = "?page=$page";
  }
  Write-Host "Requesting: http://twitter.com/statuses/friends$id_or_screenname.xml$page";
  $results = Execute-HTTPGetCommand "http://twitter.com/statuses/friends$id_or_screenname.xml$page";
  Process-TwitterUsers $results $raw;
}

#----------------------------------------------------------------------------
# followers
#----------------------------------------------------------------------------
function Get-TwitterFollowers()
{
  param([string]$id_or_screenname, [string]$page = $null, [bool]$raw = $false);
  if ( $id_or_screenname )
  {
    $id_or_screenname = "/$id_or_screenname";
  }
  if ( $page )
  {
    $page = "?page=$page";
  }
  Write-Host "Requesting: http://twitter.com/statuses/followers$id_or_screenname.xml$page";
  $results = Execute-HTTPGetCommand "http://twitter.com/statuses/followers$id_or_screenname.xml$page";
  Process-TwitterUsers $results $raw;
}

#----------------------------------------------------------------------------
# show
#----------------------------------------------------------------------------
function Get-TwitterUser()
{
  param([string]$id = $null, [string]$email = $null, [bool]$raw = $false);
  $url = $null;
  if ( $id )
  {
    $url = "http://twitter.com/users/show/$id.xml";
  }
  elseif ( $email )
  {
    $url = "http://twitter.com/users/show.xml?email=$email";
  }
  if ( $url )
  {
    $results = Execute-HTTPGetCommand $url;
    PRocess-TwitterUsers $results $raw;
  }
}

#============================================================================
# Direct Message Functions
#============================================================================
#----------------------------------------------------------------------------
# Helper functions
#----------------------------------------------------------------------------
function Process-TwitterDirectMessages()
{
  param([string]$sxml = $null, [bool]$raw = $false);
  if ( $sxml )
  {
    if ( $raw )
    {
      $sxml;
    }
    else
    {
      [xml]$xml = $sxml;
      if ( $xml.{direct-messages}.direct_message )
      {
        $dm = $xml.{direct-messages}.direct_message;
      }
      elseif ($xml.direct_message )
      {
        $dm = $xml.direct_message;
      }
      $dm | Foreach-Object -process {
        $id = $_.id;
        $text = $_.text;
        $sender_screen_name = $_.sender_screen_name;
        $name = $_.sender.name;
        $created_at = $_.created_at;
        "-------------------------";
        "(DM #$id) $text";
        "by $sender_screen_name / $name on $created_at";
      };
      "-------------------------";
    }
  }
}

#----------------------------------------------------------------------------
# direct_messages
#----------------------------------------------------------------------------
function Get-TwitterDirectMessages()
{
  param([string]$since = $null, [string]$since_id = $null, [string]$page = $null, [bool]$raw = $false);
  $args = $null;
  if ( $since )
  {
    $args = "?since=$since";
  }
  elseif ( $since_id )
  {
    $args = "?since_id=$since_id";
  }
  elseif ( $page )
  {
    $args = "?page=$page";
  }
  $results = Execute-HTTPGetCommand "http://twitter.com/direct_messages.xml$args";
  Process-TwitterDirectMessages $results $raw;
}

#----------------------------------------------------------------------------
# sent
#----------------------------------------------------------------------------
function Get-TwitterSentDirectMessages()
{
  param([string]$since = $null, [string]$since_id = $null, [string]$page = $null, [bool]$raw = $false);
  $args = $null;
  if ( $since )
  {
    $args = "?since=$since";
  }
  elseif ( $since_id )
  {
    $args = "?since_id=$since_id";
  }
  elseif ( $page )
  {
    $args = "?page=$page";
  }
  $results = Execute-HTTPGetCommand "http://twitter.com/direct_messages/sent.xml$args";
  Process-TwitterDirectMessages $results $raw;
}

#----------------------------------------------------------------------------
# new
#----------------------------------------------------------------------------
function New-TwitterDirectMessage()
{
  param([string]$user = $null, [string]$text = $null, [bool]$raw = $false);
  if ( $user -and $text )
  {
    $enctext = [System.Web.HttpUtility]::UrlEncode("$text");
    $results = Execute-HTTPPostCommand "http://twitter.com/direct_messages/new.xml" "user=$user&text=$enctext"
    Process-TwitterDirectMessages $results $raw;
  }
}

#----------------------------------------------------------------------------
# destroy
#----------------------------------------------------------------------------
function Destroy-TwitterDirectMessage()
{
  param([string]$id = $null);
  if ( $id )
  {
    $results = Execute-HTTPPostCommand "http://twitter.com/direct_messages/destroy/$id.xml" "id=$id";
  }
}

#============================================================================
# Friendship Functions
#============================================================================
#----------------------------------------------------------------------------
# create
#----------------------------------------------------------------------------
function Create-TwitterFriendship()
{
  param([string]$id = $null, [bool]$follow = $true, [bool]$raw = $false);
  if ( $id )
  {
  $follow = $follow.ToString().ToLower();
    $results = Execute-HTTPPostCommand "http://twitter.com/friendsips/create/${id}.xml" "id=${id}&follow=${follow}"
    Process-TwitterUsers $results $raw;
  }
}

#----------------------------------------------------------------------------
# destroy
#----------------------------------------------------------------------------
function Destroy-TwitterFriendship()
{
  param([string]$id = $null, [bool]$raw = $false);
  if ( $id )
  {
    $results = Execute-HTTPPostCommand "http://twitter.com/friendships/destroy/${id}.xml" "id=${id}"
    $results;
    Process-TwitterUsers $results $raw;
  }
}

#----------------------------------------------------------------------------
# exists
#----------------------------------------------------------------------------
function Get-TwitterFriendshipExists
{
  param([string]$user_a = $null, [string]$user_b = $null);
  if ( $user_a -and $user_b )
  {
    $results = Execute-HTTPGetCommand "http://twitter.com/friendships/exists.xml?user_a=${user_a}&user_b=${user_b}";
  $results;
  }
}

#============================================================================
# Social Graph Functions
#============================================================================
#----------------------------------------------------------------------------
# Helper Functions
#----------------------------------------------------------------------------
function Process-Ids()
{
  param([string]$sxml = $null, [bool]$raw = $false);
  if ( $sxml )
  {
    if ( $raw )
    {
      $sxml;
    }
    else
    {
      [xml]$x = $sxml;
      $i = 1;
      $x.ids.id | ForEach-Object -Process {
        $info = "[$i] : " + $_;
        $info;
        $i++;
      }
    }
  }
}

#----------------------------------------------------------------------------
# ids (friends)
#----------------------------------------------------------------------------
function Get-TwitterSocialGraphFriendIds()
{
  param([string]$id = $null, [bool]$raw = $false);
  $args = "";
  if ( $id )
  {
    $args = "?id=${id}";
  }
  $results = Execute-HTTPGetCommand "http://twitter.com/friends/ids.xml$args";
  Process-Ids $results $raw;
}


#----------------------------------------------------------------------------
# ids (followers)
#----------------------------------------------------------------------------
function Get-TwitterSocialGraphFollowerIds()
{
  param([string]$id = $null, [bool]$raw = $false);
  $args = "";
  if ( $id )
  {
    $args = "?id=${id}";
  }
  $results = Execute-HTTPGetCommand "http://twitter.com/followers/ids.xml$args";
  Process-Ids $results $raw;
}


#============================================================================
# Account Functions
#============================================================================
#----------------------------------------------------------------------------
# helper functions
#----------------------------------------------------------------------------
function Is-ValidHexColor()
{
  param([string]$color_in_hex = $null)
  [bool]$valid = $false;
  if ( $color_in_hex )
  {
    [regex]$regex3 = "[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]";
    [regex]$regex6 = "[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]";
    if ( ($color_in_hex.Length -eq 3) -and ($color_in_hex -match $regex3) )
    {
      $valid = $true;
    }
    elseif ( ($color_in_hex.Length -eq 6) -and ($color_in_hex -match $regex6) )
    {
      $valid = $true;
    }
  }
  $valid;
}

#----------------------------------------------------------------------------
# verify_credentials
#----------------------------------------------------------------------------
function Verify-TwitterCredentials()
{
  $results = Execute-HTTPGetCommand "http://twitter.com/account/verify_credentials.xml";
  $results;
}

#----------------------------------------------------------------------------
# end_session
#----------------------------------------------------------------------------
function End-TwitterSession()
{
  $results = Execute-HTTPPostCommand "http://twitter.com/account/end_session.xml" "";
  $results;
}

#----------------------------------------------------------------------------
# update_delivery_device
#----------------------------------------------------------------------------
function Set-TwitterDeliveryDevice()
{
  param([string]$device = $null);
  if ( $device )
  {
    if ( $device.Equals("sms") -or $device.Equals("im") -or $device.Equals("none") )
    {
      $results = Execute-HTTPPostCommand "http://twitter.com/account/update_delivery_device.xml?device=$device" "device=$device";
      $results;
    }
    else
    {
        Write-Error "device must be either sms, im, or none!"
    }
  }
}

#----------------------------------------------------------------------------
# update_profile_colors
#----------------------------------------------------------------------------
function Set-TwitterProfileColors()
{
  param(
    [string]$background_color = $null,
    [string]$text_color = $null,
    [string]$link_color = $null,
    [string]$sidebar_fill_color = $null,
    [string]$sidebar_border_color = $null);
  $args = $null;
  if ( $background_color )
  {
    if ( Is-ValidHexColor $background_color )
    {
      if ( $args ) { $args = "$args&"; }
      $args = "${args}profile_background_color=$background_color";
    }
    else
    {
      Write-Error "background_color '$background_color' must be a 3 or 6 valid hexadecimal value!";
    }
  }
  if ( $text_color )
  {
    if ( Is-ValidHexColor $text_color )
    {
      if ( $args ) { $args = "$args&"; }
      $args = "${args}profile_text_color=$text_color";
    }
    else
    {
      Write-Error "text_color '$text_color' must be a 3 or 6 valid hexadecimal value!";
    }
  }
  if ( $link_color )
  {
    if ( Is-ValidHexColor $link_color )
    {
      if ( $args ) { $args = "$args&"; }
      $args = "${args}profile_link_color=$link_color";
    }
    else
    {
      Write-Error "link_color '$link_color' must be a 3 or 6 valid hexadecimal value!";
    }
  }
  if ( $sidebar_fill_color )
  {
    if ( Is-ValidHexColor $sidebar_fill_color )
    {
      if ( $args ) { $args = "$args&"; }
      $args = "${args}profile_sidebar_fill_color=$sidebar_fill_color";
    }
    else
    {
      Write-Error "sidebar_fill_color '$sidebar_fill_color' must be a 3 or 6 valid hexadecimal value!";
    }
  }
  if ( $sidebar_border_color )
  {
    if ( Is-ValidHexColor $sidebar_border_color )
    {
      if ( $args ) { $args = "$args&"; }
      $args = "${args}profile_sidebar_border_color=$sidebar_border_color";
    }
    else
    {
      Write-Error "sidebar_border_color '$sidebar_border_color' must be a 3 or 6 valid hexadecimal value!";
    }
  }
  if ( $args )
  {
    Write-Host "http://twitter.com/account/update_profile_colors.xml - $args";
    $results = Execute-HTTPPostCommand "http://twitter.com/account/update_profile_colors.xml" $args;
    $results;
  }
}

#----------------------------------------------------------------------------
# update_profile_image
#----------------------------------------------------------------------------
function Set-TwitterProfileImage()
{
  param([string]$image = $null);
  if ( $image )
  {
    $results = Execute-HTTPPostCommand "http://twitter.com/account/update_profile_image.xml" "image=$image";
    $results;
  }
}

#----------------------------------------------------------------------------
# update_profile_background_image
#----------------------------------------------------------------------------
function Set-TwitterProfileBackgroundImage()
{
  param([string]$image = $null);
  if ( $image )
  {
    $results = Execute-HTTPPostCommand "http://twitter.com/account/update_profile_background_image.xml" "image=$image";
    $results;
  }
}

#----------------------------------------------------------------------------
# rate_limit_status
#----------------------------------------------------------------------------
function Get-TwitterRateLimitStatus()
{
  param([bool]$raw = $false);
  $sXml = Execute-HTTPGetCommand "http://twitter.com/account/rate_limit_status.xml";
  if ( $sXml )
  {
    if ( $raw )
  {
    $sXml;
  }
  else
  {
    [xml]$results = $sXml;
      $remaining_hits = $results.hash.{remaining-hits}.get_InnerText();
      $hourly_limit = $results.hash.{hourly-limit}.get_InnerText();
      $reset_time_in_seconds = $results.hash.{reset-time-in-seconds}.get_InnerText();
      $reset_time = $results.hash.{reset-time}.get_InnerText();
      "Remaining Hits: $remaining_hits";
      "Hourly Limit  : $hourly_limit";
      "Reset Time (s): $reset_time_in_seconds s.";
      "Reset Time    : $reset_time";
    }
  }
}

#----------------------------------------------------------------------------
# update_profile
#----------------------------------------------------------------------------
function Set-TwitterProfile()
{
  param(
    [string]$name = $null,
    [string]$email = $null,
    [string]$url = $null,
    [string]$location = $null,
    [string]$description = $null);
  $args = $null;
  if ( $name )
  {
    if ( $args ) { $args = "$args&"; }
    $args = "${args}name=$name";
  }
  if ( $email )
  {
    if ( $args ) { $args = "$args&"; }
    $args = "${args}email=$email";
  }
  if ( $url )
  {
    if ( $args ) { $args = "$args&"; }
    $args = "${args}url=$url";
  }
  if ( $location )
  {
    if ( $args ) { $args = "$args&"; }
    $args = "${args}location=$location";
  }
  if ( $description )
  {
    if ( $args ) { $args = "$args&"; }
    $args = "${args}description=$description";
  }
  if ( $args )
  {
    $results = Execute-HTTPPostCommand "http://twitter.com/account/update_profile.xml" $args;
    $results;
  }
}

#============================================================================
# Favorite Functions
#============================================================================
#----------------------------------------------------------------------------
# favorites
#----------------------------------------------------------------------------
function Get-TwitterFavorites()
{
  param([string]$id, [string]$page = $null, [bool]$raw = $false);
  if ( $id )
  {
    $id = "/$id";
  }
  if ( $page )
  {
    $page = "?page=$page";
  }
  $results = Execute-HTTPGetCommand "http://twitter.com/favorites${id}.xml${page}";
  Process-TwitterStatus $results $raw;
}

#----------------------------------------------------------------------------
# create
#----------------------------------------------------------------------------
function Create-TwitterFavorite()
{
  param([string]$id, [bool]$raw = $false);
  if ( $id )
  {
    $id = "/$id";
  }
  $results = Execute-HTTPPostCommand "http://twitter.com/favorites/create${id}.xml" "id=${id}";
  Process-TwitterStatus $results $raw;
}

#----------------------------------------------------------------------------
# destroy
#----------------------------------------------------------------------------
function Destroy-TwitterFavorite()
{
  param([string]$id, [bool]$raw = $false);
  if ( $id )
  {
    $id = "/$id";
  }
  $results = Execute-HTTPPostCommand "http://twitter.com/favorites/destroy${id}.xml" "id=${id}";
  Process-TwitterStatus $results $raw;
}


#============================================================================
# Notification Functions
#============================================================================
#----------------------------------------------------------------------------
# follow
#----------------------------------------------------------------------------
function Follow-TwitterUser()
{
  param([string]$id, [bool]$raw = $false);
  if ( $id )
  {
    $results = Execute-HTTPPostCommand "http://twitter.com/notifications/follow/${id}.xml" "id=${id}";
    Process-TwitterUsers $results $raw;
  }
}

#----------------------------------------------------------------------------
# leave
#----------------------------------------------------------------------------
function Leave-TwitterUser()
{
  param([string]$id, [bool]$raw = $false);
  if ( $id )
  {
    $results = Execute-HTTPPostCommand "http://twitter.com/notifications/leave/${id}.xml" "id=${id}";
    Process-TwitterUsers $results $raw;
  }
}

#============================================================================
# Block Functions
#============================================================================
#----------------------------------------------------------------------------
# create
#----------------------------------------------------------------------------
function Create-TwitterBlock()
{
  param([string]$id, [bool]$raw = $false);
  if ( $id )
  {
    $results = Execute-HTTPPostCommand "http://twitter.com/blocks/create/${id}.xml" "id=${id}";
    Process-TwitterUsers $results $raw;
  }
}

#----------------------------------------------------------------------------
# destroy
#----------------------------------------------------------------------------
function Destroy-TwitterBlock()
{
  param([string]$id, [bool]$raw = $false);
  if ( $id )
  {
    $results = Execute-HTTPPostCommand "http://twitter.com/blocks/destroy/${id}.xml" "id=${id}";
    Process-TwitterUsers $results $raw;
  }
}


#============================================================================
# Help Functions
#============================================================================
#----------------------------------------------------------------------------
# test
#----------------------------------------------------------------------------
function Get-TwitterHelpTest()
{
  $results = Execute-HTTPGetCommand "http://twitter.com/help/test.xml";
  $results;
}

#----------------------------------------------------------------------------
# downtime_schedule
#----------------------------------------------------------------------------
function Get-TwitterDowntimeSchedule()
{
  $results = Execute-HTTPGetCommand "http://twitter.com/help/downtime_schedule.xml";
  $results;
}

#============================================================================
# TwitterCounter
#============================================================================
#----------------------------------------------------------------------------
# Get-TwitterCounterStats
#----------------------------------------------------------------------------
function Get-TwitterCounterStats()
{
  param([string]$username = $null, [int]$results = 14, [bool]$raw = $false);
  $output = "xml";
  $stats = $null;
  if ( $username )
  {
    $stats = Execute-HTTPGetCommand "http://twittercounter.com/api/?username=$username&output=$output&results=$results"
  }
  if ( !$raw )
  {
    $stats = [xml]$stats;
    $stats.twittercounter
  }
  else
  {
    $stats;
  }
}

#============================================================================
# Utilities
#============================================================================
function Get-GroupMemberList()
{
  param([string]$url = $null, [string]$tagstart = $null);
  if ( $tagstart -eq $null ) { $tagstart = "entrybody"; }
  
  # Posh Twitter Users "http://www.mindofroot.com/powershell-twitterers/";  
  if ( $url )
  {
    $site = Execute-HTTPGetRequest $url;
    
    $previous = @()
    $start = $site.IndexOf('
') $site = $site.substring($start) $start = $site.IndexOf('
    ') $site = $site.substring($start) $end = $site.IndexOf('
') + 5 [xml]$doc = $site.substring(0,$end) $results = $doc.ul.li | select @{name='Name';Expression={$_.a.'#text'}}, @{name='TwitterURL';Expression={$_.a.href}}, @{name='UserName';Expression={$_.a.href -replace 'http://twitter.com/'}} $results = $results[1..($results.count-1)] return $results } }
Published Mar 09, 2015
Version 1.0
No CommentsBe the first to comment
"}},"componentScriptGroups({\"componentId\":\"custom.widget.Beta_MetaNav\"})":{"__typename":"ComponentScriptGroups","scriptGroups":{"__typename":"ComponentScriptGroupsDefinition","afterInteractive":{"__typename":"PageScriptGroupDefinition","group":"AFTER_INTERACTIVE","scriptIds":[]},"lazyOnLoad":{"__typename":"PageScriptGroupDefinition","group":"LAZY_ON_LOAD","scriptIds":[]}},"componentScripts":[]},"component({\"componentId\":\"custom.widget.Beta_Footer\"})":{"__typename":"Component","render({\"context\":{\"component\":{\"entities\":[],\"props\":{}},\"page\":{\"entities\":[\"message:278318\"],\"name\":\"TkbMessagePage\",\"props\":{},\"url\":\"https://community.f5.com/kb/codeshare/ps-twitter-api/278318\"}}})":{"__typename":"ComponentRenderResult","html":"
 
 
 
 
 

\"F5 ©2024 F5, Inc. All rights reserved.
Trademarks Policies Privacy California Privacy Do Not Sell My Personal Information
"}},"componentScriptGroups({\"componentId\":\"custom.widget.Beta_Footer\"})":{"__typename":"ComponentScriptGroups","scriptGroups":{"__typename":"ComponentScriptGroupsDefinition","afterInteractive":{"__typename":"PageScriptGroupDefinition","group":"AFTER_INTERACTIVE","scriptIds":[]},"lazyOnLoad":{"__typename":"PageScriptGroupDefinition","group":"LAZY_ON_LOAD","scriptIds":[]}},"componentScripts":[]},"component({\"componentId\":\"custom.widget.Tag_Manager_Helper\"})":{"__typename":"Component","render({\"context\":{\"component\":{\"entities\":[],\"props\":{}},\"page\":{\"entities\":[\"message:278318\"],\"name\":\"TkbMessagePage\",\"props\":{},\"url\":\"https://community.f5.com/kb/codeshare/ps-twitter-api/278318\"}}})":{"__typename":"ComponentRenderResult","html":" "}},"componentScriptGroups({\"componentId\":\"custom.widget.Tag_Manager_Helper\"})":{"__typename":"ComponentScriptGroups","scriptGroups":{"__typename":"ComponentScriptGroupsDefinition","afterInteractive":{"__typename":"PageScriptGroupDefinition","group":"AFTER_INTERACTIVE","scriptIds":[]},"lazyOnLoad":{"__typename":"PageScriptGroupDefinition","group":"LAZY_ON_LOAD","scriptIds":[]}},"componentScripts":[]},"component({\"componentId\":\"custom.widget.Consent_Blackbar\"})":{"__typename":"Component","render({\"context\":{\"component\":{\"entities\":[],\"props\":{}},\"page\":{\"entities\":[\"message:278318\"],\"name\":\"TkbMessagePage\",\"props\":{},\"url\":\"https://community.f5.com/kb/codeshare/ps-twitter-api/278318\"}}})":{"__typename":"ComponentRenderResult","html":"
"}},"componentScriptGroups({\"componentId\":\"custom.widget.Consent_Blackbar\"})":{"__typename":"ComponentScriptGroups","scriptGroups":{"__typename":"ComponentScriptGroupsDefinition","afterInteractive":{"__typename":"PageScriptGroupDefinition","group":"AFTER_INTERACTIVE","scriptIds":[]},"lazyOnLoad":{"__typename":"PageScriptGroupDefinition","group":"LAZY_ON_LOAD","scriptIds":[]}},"componentScripts":[]},"cachedText({\"lastModified\":\"1745595729125\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/common/QueryHandler\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/common/QueryHandler-1745595729125"}],"cachedText({\"lastModified\":\"1745595729125\",\"locale\":\"en-US\",\"namespaces\":[\"components/community/NavbarDropdownToggle\"]})":[{"__ref":"CachedAsset:text:en_US-components/community/NavbarDropdownToggle-1745595729125"}],"cachedText({\"lastModified\":\"1745595729125\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageSubject\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageSubject-1745595729125"}],"cachedText({\"lastModified\":\"1745595729125\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageBody\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageBody-1745595729125"}],"cachedText({\"lastModified\":\"1745595729125\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageCustomFields\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageCustomFields-1745595729125"}],"cachedText({\"lastModified\":\"1745595729125\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageRevision\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageRevision-1745595729125"}],"cachedText({\"lastModified\":\"1745595729125\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageReplyButton\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageReplyButton-1745595729125"}],"cachedText({\"lastModified\":\"1745595729125\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageAuthorBio\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageAuthorBio-1745595729125"}],"cachedText({\"lastModified\":\"1745595729125\",\"locale\":\"en-US\",\"namespaces\":[\"components/guides/GuideBottomNavigation\"]})":[{"__ref":"CachedAsset:text:en_US-components/guides/GuideBottomNavigation-1745595729125"}],"cachedText({\"lastModified\":\"1745595729125\",\"locale\":\"en-US\",\"namespaces\":[\"components/tags/TagView/TagViewChip\"]})":[{"__ref":"CachedAsset:text:en_US-components/tags/TagView/TagViewChip-1745595729125"}],"cachedText({\"lastModified\":\"1745595729125\",\"locale\":\"en-US\",\"namespaces\":[\"components/users/UserLink\"]})":[{"__ref":"CachedAsset:text:en_US-components/users/UserLink-1745595729125"}],"cachedText({\"lastModified\":\"1745595729125\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/users/UserRank\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/users/UserRank-1745595729125"}],"cachedText({\"lastModified\":\"1745595729125\",\"locale\":\"en-US\",\"namespaces\":[\"components/users/UserRegistrationDate\"]})":[{"__ref":"CachedAsset:text:en_US-components/users/UserRegistrationDate-1745595729125"}],"cachedText({\"lastModified\":\"1745595729125\",\"locale\":\"en-US\",\"namespaces\":[\"components/customComponent/CustomComponent\"]})":[{"__ref":"CachedAsset:text:en_US-components/customComponent/CustomComponent-1745595729125"}],"cachedText({\"lastModified\":\"1745595729125\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/users/UserAvatar\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/users/UserAvatar-1745595729125"}],"cachedText({\"lastModified\":\"1745595729125\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/ranks/UserRankLabel\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/ranks/UserRankLabel-1745595729125"}]},"Theme:customTheme1":{"__typename":"Theme","id":"customTheme1"},"User:user:-1":{"__typename":"User","id":"user:-1","uid":-1,"login":"Former Member","email":"","avatar":null,"rank":null,"kudosWeight":1,"registrationData":{"__typename":"RegistrationData","status":"ANONYMOUS","registrationTime":null,"confirmEmailStatus":false,"registrationAccessLevel":"VIEW","ssoRegistrationFields":[]},"ssoId":null,"profileSettings":{"__typename":"ProfileSettings","dateDisplayStyle":{"__typename":"InheritableStringSettingWithPossibleValues","key":"layout.friendly_dates_enabled","value":"false","localValue":"true","possibleValues":["true","false"]},"dateDisplayFormat":{"__typename":"InheritableStringSetting","key":"layout.format_pattern_date","value":"dd-MMM-yyyy","localValue":"MM-dd-yyyy"},"language":{"__typename":"InheritableStringSettingWithPossibleValues","key":"profile.language","value":"en-US","localValue":null,"possibleValues":["en-US","de-DE"]},"repliesSortOrder":{"__typename":"InheritableStringSettingWithPossibleValues","key":"config.user_replies_sort_order","value":"DEFAULT","localValue":"DEFAULT","possibleValues":["DEFAULT","LIKES","PUBLISH_TIME","REVERSE_PUBLISH_TIME"]}},"deleted":false},"CachedAsset:pages-1745954211013":{"__typename":"CachedAsset","id":"pages-1745954211013","value":[{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"HowDoI.GetInvolved.MvpProgram","type":"COMMUNITY","urlPath":"/c/how-do-i/get-involved/mvp-program","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"BlogViewAllPostsPage","type":"BLOG","urlPath":"/category/:categoryId/blog/:boardId/all-posts/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"CasePortalPage","type":"CASE_PORTAL","urlPath":"/caseportal","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"CreateGroupHubPage","type":"GROUP_HUB","urlPath":"/groups/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"CaseViewPage","type":"CASE_DETAILS","urlPath":"/case/:caseId/:caseNumber","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"InboxPage","type":"COMMUNITY","urlPath":"/inbox","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"HowDoI.GetInvolved.AdvocacyProgram","type":"COMMUNITY","urlPath":"/c/how-do-i/get-involved/advocacy-program","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"HowDoI.GetHelp.NonCustomer","type":"COMMUNITY","urlPath":"/c/how-do-i/get-help/non-customer","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"HelpFAQPage","type":"COMMUNITY","urlPath":"/help","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"HowDoI.GetHelp.F5Customer","type":"COMMUNITY","urlPath":"/c/how-do-i/get-help/f5-customer","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"IdeaMessagePage","type":"IDEA_POST","urlPath":"/idea/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"IdeaViewAllIdeasPage","type":"IDEA","urlPath":"/category/:categoryId/ideas/:boardId/all-ideas/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"LoginPage","type":"USER","urlPath":"/signin","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"BlogPostPage","type":"BLOG","urlPath":"/category/:categoryId/blogs/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"HowDoI.GetInvolved","type":"COMMUNITY","urlPath":"/c/how-do-i/get-involved","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"HowDoI.Learn","type":"COMMUNITY","urlPath":"/c/how-do-i/learn","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739501996000,"localOverride":null,"page":{"id":"Test","type":"CUSTOM","urlPath":"/custom-test-2","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"ThemeEditorPage","type":"COMMUNITY","urlPath":"/designer/themes","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"TkbViewAllArticlesPage","type":"TKB","urlPath":"/category/:categoryId/kb/:boardId/all-articles/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"OccasionEditPage","type":"EVENT","urlPath":"/event/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"OAuthAuthorizationAllowPage","type":"USER","urlPath":"/auth/authorize/allow","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"PageEditorPage","type":"COMMUNITY","urlPath":"/designer/pages","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"PostPage","type":"COMMUNITY","urlPath":"/category/:categoryId/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"ForumBoardPage","type":"FORUM","urlPath":"/category/:categoryId/discussions/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"TkbBoardPage","type":"TKB","urlPath":"/category/:categoryId/kb/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"EventPostPage","type":"EVENT","urlPath":"/category/:categoryId/events/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"UserBadgesPage","type":"COMMUNITY","urlPath":"/users/:login/:userId/badges","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"GroupHubMembershipAction","type":"GROUP_HUB","urlPath":"/membership/join/:nodeId/:membershipType","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"MaintenancePage","type":"COMMUNITY","urlPath":"/maintenance","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"IdeaReplyPage","type":"IDEA_REPLY","urlPath":"/idea/:boardId/:messageSubject/:messageId/comments/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"UserSettingsPage","type":"USER","urlPath":"/mysettings/:userSettingsTab","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"GroupHubsPage","type":"GROUP_HUB","urlPath":"/groups","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"ForumPostPage","type":"FORUM","urlPath":"/category/:categoryId/discussions/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"OccasionRsvpActionPage","type":"OCCASION","urlPath":"/event/:boardId/:messageSubject/:messageId/rsvp/:responseType","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"VerifyUserEmailPage","type":"USER","urlPath":"/verifyemail/:userId/:verifyEmailToken","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"AllOccasionsPage","type":"OCCASION","urlPath":"/category/:categoryId/events/:boardId/all-events/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"EventBoardPage","type":"EVENT","urlPath":"/category/:categoryId/events/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"TkbReplyPage","type":"TKB_REPLY","urlPath":"/kb/:boardId/:messageSubject/:messageId/comments/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"IdeaBoardPage","type":"IDEA","urlPath":"/category/:categoryId/ideas/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"CommunityGuideLinesPage","type":"COMMUNITY","urlPath":"/communityguidelines","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"CaseCreatePage","type":"SALESFORCE_CASE_CREATION","urlPath":"/caseportal/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"TkbEditPage","type":"TKB","urlPath":"/kb/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"ForgotPasswordPage","type":"USER","urlPath":"/forgotpassword","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"IdeaEditPage","type":"IDEA","urlPath":"/idea/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"TagPage","type":"COMMUNITY","urlPath":"/tag/:tagName","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"BlogBoardPage","type":"BLOG","urlPath":"/category/:categoryId/blog/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"OccasionMessagePage","type":"OCCASION_TOPIC","urlPath":"/event/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"ManageContentPage","type":"COMMUNITY","urlPath":"/managecontent","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"ClosedMembershipNodeNonMembersPage","type":"GROUP_HUB","urlPath":"/closedgroup/:groupHubId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"HowDoI.GetHelp.Community","type":"COMMUNITY","urlPath":"/c/how-do-i/get-help/community","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"CommunityPage","type":"COMMUNITY","urlPath":"/","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"HowDoI.GetInvolved.ContributeCode","type":"COMMUNITY","urlPath":"/c/how-do-i/get-involved/contribute-code","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"ForumMessagePage","type":"FORUM_TOPIC","urlPath":"/discussions/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"IdeaPostPage","type":"IDEA","urlPath":"/category/:categoryId/ideas/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"BlogMessagePage","type":"BLOG_ARTICLE","urlPath":"/blog/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"RegistrationPage","type":"USER","urlPath":"/register","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"EditGroupHubPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"ForumEditPage","type":"FORUM","urlPath":"/discussions/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"ResetPasswordPage","type":"USER","urlPath":"/resetpassword/:userId/:resetPasswordToken","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"TkbMessagePage","type":"TKB_ARTICLE","urlPath":"/kb/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"HowDoI.Learn.AboutIrules","type":"COMMUNITY","urlPath":"/c/how-do-i/learn/about-irules","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"BlogEditPage","type":"BLOG","urlPath":"/blog/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"HowDoI.GetHelp.F5Support","type":"COMMUNITY","urlPath":"/c/how-do-i/get-help/f5-support","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"ManageUsersPage","type":"USER","urlPath":"/users/manage/:tab?/:manageUsersTab?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"ForumReplyPage","type":"FORUM_REPLY","urlPath":"/discussions/:boardId/:messageSubject/:messageId/replies/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"PrivacyPolicyPage","type":"COMMUNITY","urlPath":"/privacypolicy","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"NotificationPage","type":"COMMUNITY","urlPath":"/notifications","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"UserPage","type":"USER","urlPath":"/users/:login/:userId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"HealthCheckPage","type":"COMMUNITY","urlPath":"/health","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"OccasionReplyPage","type":"OCCASION_REPLY","urlPath":"/event/:boardId/:messageSubject/:messageId/comments/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"ManageMembersPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId/manage/:tab?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"SearchResultsPage","type":"COMMUNITY","urlPath":"/search","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"BlogReplyPage","type":"BLOG_REPLY","urlPath":"/blog/:boardId/:messageSubject/:messageId/replies/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"GroupHubPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"TermsOfServicePage","type":"COMMUNITY","urlPath":"/termsofservice","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"HowDoI.GetHelp","type":"COMMUNITY","urlPath":"/c/how-do-i/get-help","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"HowDoI.GetHelp.SecurityIncident","type":"COMMUNITY","urlPath":"/c/how-do-i/get-help/security-incident","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"CategoryPage","type":"CATEGORY","urlPath":"/category/:categoryId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"ForumViewAllTopicsPage","type":"FORUM","urlPath":"/category/:categoryId/discussions/:boardId/all-topics/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"TkbPostPage","type":"TKB","urlPath":"/category/:categoryId/kbs/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"GroupHubPostPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745954211013,"localOverride":null,"page":{"id":"HowDoI","type":"COMMUNITY","urlPath":"/c/how-do-i","__typename":"PageDescriptor"},"__typename":"PageResource"}],"localOverride":false},"CachedAsset:text:en_US-components/context/AppContext/AppContextProvider-0":{"__typename":"CachedAsset","id":"text:en_US-components/context/AppContext/AppContextProvider-0","value":{"noCommunity":"Cannot find community","noUser":"Cannot find current user","noNode":"Cannot find node with id {nodeId}","noMessage":"Cannot find message with id {messageId}","userBanned":"We're sorry, but you have been banned from using this site.","userBannedReason":"You have been banned for the following reason: {reason}"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/common/Loading/LoadingDot-0":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/Loading/LoadingDot-0","value":{"title":"Loading..."},"localOverride":false},"AssociatedImage:{\"url\":\"https://community.f5.com/t5/s/zihoc95639/images/cmstMzgtTzNNNGh5\"}":{"__typename":"AssociatedImage","url":"https://community.f5.com/t5/s/zihoc95639/images/cmstMzgtTzNNNGh5","height":0,"width":0,"mimeType":"image/svg+xml"},"Rank:rank:38":{"__typename":"Rank","id":"rank:38","position":15,"name":"Cirrus","color":"CCCCCC","icon":{"__ref":"AssociatedImage:{\"url\":\"https://community.f5.com/t5/s/zihoc95639/images/cmstMzgtTzNNNGh5\"}"},"rankStyle":"FILLED"},"User:user:131293":{"__typename":"User","id":"user:131293","uid":131293,"login":"CodeCentral_194","deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://community.f5.com/t5/s/zihoc95639/m_assets/avatars/default/avatar-10.svg?time=0"},"rank":{"__ref":"Rank:rank:38"},"email":"","messagesCount":277,"biography":null,"topicsCount":277,"kudosReceivedCount":7,"kudosGivenCount":0,"kudosWeight":1,"registrationData":{"__typename":"RegistrationData","status":null,"registrationTime":"2019-05-04T20:11:22.000-07:00","confirmEmailStatus":null},"followersCount":null,"solutionsCount":0},"Category:category:CrowdSRC":{"__typename":"Category","id":"category:CrowdSRC","entityType":"CATEGORY","displayId":"CrowdSRC","nodeType":"category","depth":1,"title":"CrowdSRC","shortTitle":"CrowdSRC","parent":{"__ref":"Category:category:top"},"categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:top":{"__typename":"Category","id":"category:top","entityType":"CATEGORY","displayId":"top","nodeType":"category","depth":0,"title":"Top","shortTitle":"Top"},"Tkb:board:codeshare":{"__typename":"Tkb","id":"board:codeshare","entityType":"TKB","displayId":"codeshare","nodeType":"board","depth":2,"conversationStyle":"TKB","repliesProperties":{"__typename":"RepliesProperties","sortOrder":"PUBLISH_TIME","repliesFormat":"threaded"},"tagProperties":{"__typename":"TagNodeProperties","tagsEnabled":{"__typename":"PolicyResult","failureReason":null}},"requireTags":true,"tagType":"FREEFORM_AND_PRESET","description":"Have some code. Share some code.","title":"CodeShare","shortTitle":"CodeShare","parent":{"__ref":"Category:category:CrowdSRC"},"ancestors":{"__typename":"CoreNodeConnection","edges":[{"__typename":"CoreNodeEdge","node":{"__ref":"Community:community:zihoc95639"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:CrowdSRC"}}]},"userContext":{"__typename":"NodeUserContext","canAddAttachments":false,"canUpdateNode":false,"canPostMessages":false,"isSubscribed":false},"theme":{"__ref":"Theme:customTheme1"},"boardPolicies":{"__typename":"BoardPolicies","canViewSpamDashBoard":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.feature.moderation_spam.action.access_spam_quarantine.allowed.accessDenied","key":"error.lithium.policies.feature.moderation_spam.action.access_spam_quarantine.allowed.accessDenied","args":[]}},"canArchiveMessage":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.content_archivals.enable_content_archival_settings.accessDenied","key":"error.lithium.policies.content_archivals.enable_content_archival_settings.accessDenied","args":[]}},"canPublishArticleOnCreate":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.forums.policy_can_publish_on_create_workflow_action.accessDenied","key":"error.lithium.policies.forums.policy_can_publish_on_create_workflow_action.accessDenied","args":[]}},"canReadNode":{"__typename":"PolicyResult","failureReason":null}},"isManualSortOrderAvailable":false,"tkbPolicies":{"__typename":"TkbPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"TkbTopicMessage:message:278318":{"__typename":"TkbTopicMessage","uid":278318,"subject":"Ps Twitter Api","id":"message:278318","revisionNum":1,"repliesCount":0,"author":{"__ref":"User:user:131293"},"depth":0,"hasGivenKudo":false,"helpful":null,"board":{"__ref":"Tkb:board:codeshare"},"conversation":{"__ref":"Conversation:conversation:278318"},"messagePolicies":{"__typename":"MessagePolicies","canPublishArticleOnEdit":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.forums.policy_can_publish_on_edit_workflow_action.accessDenied","key":"error.lithium.policies.forums.policy_can_publish_on_edit_workflow_action.accessDenied","args":[]}},"canModerateSpamMessage":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.feature.moderation_spam.action.moderate_entity.allowed.accessDenied","key":"error.lithium.policies.feature.moderation_spam.action.moderate_entity.allowed.accessDenied","args":[]}}},"contentWorkflow":{"__typename":"ContentWorkflow","state":"PUBLISH","scheduledPublishTime":null,"scheduledTimezone":null,"userContext":{"__typename":"MessageWorkflowContext","canSubmitForReview":null,"canEdit":false,"canRecall":null,"canSubmitForPublication":null,"canReturnToAuthor":null,"canPublish":null,"canReturnToReview":null,"canSchedule":false},"shortScheduledTimezone":null},"readOnly":false,"editFrozen":false,"moderationData":{"__ref":"ModerationData:moderation_data:278318"},"teaser":"","body":"

Problem this snippet solves:

Here is a set of PowerShell functions that give access to the Twitter web based APIs allowing you to interact with the Twitter service from within Windows PowerShell.

How to use this snippet:

Twitter Functions

\n

Internal Helpers

\n
function Shrink-Url()\nfunction Shrink-Links()\nfunction Set-TwitterCredentials()\nfunction Get-TwitterCredentials()\nfunction Execute-HTTPGetCommand()\nfunction Execute-HTTPPostCommand()\nfunction Process-TwitterStatus()\n
\n

Status

\n
function Get-TwitterPublicTimeline()\nfunction Get-TwitterFriendsTimeline()\nfunction Get-TwitterUserTimeline()\nfunction Get-TwitterStatus()\nfunction Set-TwitterStatus()\nfunction Get-TwitterReplies()\nfunction Destroy-TwitterStatus()\n
\n

User

\n
function Process-TwitterUsers()\nfunction Get-TwitterFriends()\nfunction Get-TwitterFollowers()\nfunction Get-TwitterUser()\n
\n

Direct Messages

\n
function Process-TwitterDirectMessages()\nfunction Get-TwitterDirectMessages()\nfunction Get-TwitterSentDirectMessages()\nfunction New-TwitterDirectMessage()\nfunction Destroy-TwitterDirectMessage()\n
\n

Friendship

\n
function Get-TwitterFriendshipExists\nfunction Process-Ids()\nfunction Get-TwitterSocialGraphFriendIds()\nfunction Get-TwitterSocialGraphFollowerIds()\n
\n

Account

\n
function Is-ValidHexColor()\nfunction Verify-TwitterCredentials()\nfunction End-TwitterSession()\nfunction Set-TwitterDeliveryDevice()\nfunction Set-TwitterProfileColors()\nfunction Set-TwitterProfileImage()\nfunction Set-TwitterProfileBackgroundImage()\nfunction Get-TwitterRateLimitStatus()\nfunction Set-TwitterProfile()\n
\n

Favorites

\n
function Get-TwitterFavorites()\nfunction Create-TwitterFavorite()\nfunction Destroy-TwitterFavorite()\n
\n

Notification

\n
function Follow-TwitterUser()\nfunction Leave-TwitterUser()\n
\n

Block

\n
function Create-TwitterBlock()\nfunction Destroy-TwitterBlock()\n
\n

Help

\n
function Get-TwitterHelpTest()\nfunction Get-TwitterDowntimeSchedule()\n
\n

3rd Party Services

\n
function Get-TwitterCounterStats()\nfunction Get-GroupMemberList()\n

Code :

#----------------------------------------------------------------------------\n# The contents of this file are subject to the \"END USER LICENSE AGREEMENT \n# FOR F5 Software Development Kit for iControl\"; you may not use this file \n# except in compliance with the License. The License is included in the \n# iControl Software Development Kit.\n#\n# Software distributed under the License is distributed on an \"AS IS\"\n# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See\n# the License for the specific language governing rights and limitations\n# under the License.\n#\n# The Original Code is iControl Code and related documentation\n# distributed by F5.\n#\n# The Initial Developer of the Original Code is F5 Networks,\n# Inc. Seattle, WA, USA. Portions created by F5 are Copyright (C) 1996-2008 \n# F5 Networks, Inc. All Rights Reserved.  iControl (TM) is a registered \n# trademark of F5 Networks, Inc.\n#\n# Alternatively, the contents of this file may be used under the terms\n# of the GNU General Public License (the \"GPL\"), in which case the\n# provisions of GPL are applicable instead of those above.  If you wish\n# to allow use of your version of this file only under the terms of the\n# GPL and not to allow others to use your version of this file under the\n# License, indicate your decision by deleting the provisions above and\n# replace them with the notice and other provisions required by the GPL.\n# If you do not delete the provisions above, a recipient may use your\n# version of this file under either the License or the GPL.\n#----------------------------------------------------------------------------\n[void] [Reflection.Assembly]::LoadWithPartialName(\"System.Web\") \n[void] [Reflection.Assembly]::LoadWithPartialName(\"System.Text\") \n[System.Net.ServicePointManager]::Expect100Continue = $false;\n\n$script:g_creds = $null;\n#============================================================================\n# Shared Functions\n#============================================================================\n#----------------------------------------------------------------------------\n# function Shrink-Url\n#----------------------------------------------------------------------------\nfunction Shrink-Url()\n{\n  param([string]$longurl = $null, [string]$provider = \"tinyurl\");\n  $shorturl = $null;\n  if ( $longurl )\n  {\n    switch ($provider.ToLower())\n    {\n      \"is.gd\" {\n        $shorturl = Execute-HTTPGetCommand \"http://is.gd/api.php?longurl=$longurl\";\n      }\n      \"tinyurl\" {\n        $shorturl = Execute-HTTPGetCommand \"http://tinyurl.com/api-create.php?url=$longurl\";\n      }\n      \"snipurl\" {\n        $shorturl = Execute-HTTPGetCommand \"http://snipurl.com/site/snip?r=simple&link=$longurl\";\n      }\n      default {\n        $shorturl = Execute-HTTPGetCommand \"http://tinyurl.com/api-create.php?url=$longurl\";\n      }\n    }\n  }\n  $shorturl;\n}\n\n#----------------------------------------------------------------------------\n# function Shrink-Links\n#----------------------------------------------------------------------------\nfunction Shrink-Links()\n{\n  param([string]$text = $null, [string]$provider = \"tinyurl\");\n\n  [regex]$regex=\"(http|ftp|https):\\/\\/[\\w\\-_]+(\\.[\\w\\-_]+)+([\\w\\-\\.,@?^=%&:/~\\+#]*[\\w\\-\\@?^=%&/~\\+#])?\"\n\n  if ($text -match $regex)\n  {\n    $link = $matches[0]\n  }\n  \n  #if an embedded url was found, convert it to a shortened link\n  if ($link)\n  {\n    $shrunklink = Shrink-Url $link\n    $text = $text.Replace($link, $shrunklink)\n  }\n  $text;\n}\n\n#----------------------------------------------------------------------------\n# function Set-TwitterCredentials\n#----------------------------------------------------------------------------\nfunction Set-TwitterCredentials()\n{\n  param([string]$user = $null, [string]$pass = $null);\n  if ( $user -and $pass )\n  {\n    $script:g_creds = New-Object System.Net.NetworkCredential -argumentList ($user, $pass);\n  }\n  else\n  {\n    $creds = Get-TwitterCredentials;\n  }\n}\n\n#----------------------------------------------------------------------------\n# function Get-TwitterCredentials\n#----------------------------------------------------------------------------\nfunction Get-TwitterCredentials()\n{\n  if ( $null -eq $g_creds )\n  {\n    trap { Write-Error \"ERROR: You must enter your Twitter credentials for PoshTweet to work!\"; continue; }\n    $c = Get-Credential\n    if ( $c )\n    {\n      $user = $c.GetNetworkCredential().Username;\n      $pass = $c.GetNetworkCredential().Password;\n      $script:g_creds = New-Object System.Net.NetworkCredential -argumentList ($user, $pass);\n    }\n  }\n  $script:g_creds;\n}\n\n#----------------------------------------------------------------------------\n# function Execute-HTTPGetCommand\n#----------------------------------------------------------------------------\nfunction Execute-HTTPGetCommand()\n{\n  param([string] $url = $null);\n  if ( $url )\n  {\n    [System.Net.WebClient]$webClient = New-Object System.Net.WebClient\n    if ( $url.ToLower().Contains(\"twitter.com\") )\n    {\n      $webClient.Credentials = Get-TwitterCredentials\n    }\n  \n    [System.IO.Stream]$stream = $webClient.OpenRead($url);\n    [System.IO.StreamReader]$sr = New-Object System.IO.StreamReader -argumentList $stream;\n    [string]$results = $sr.ReadToEnd();\n    $results;\n  }\n}\n\n#----------------------------------------------------------------------------\n# function Execute-HTTPPostCommand\n#----------------------------------------------------------------------------\nfunction Execute-HTTPPostCommand()\n{\n  param([string] $url = $null, [string] $data = $null);\n\n  if ( $url -and $data )\n  {\n    [System.Net.WebRequest]$webRequest = [System.Net.WebRequest]::Create($url);\n    $webRequest.ServicePoint.Expect100Continue = $false;\n    if ( $url.ToLower().Contains(\"twitter.com\") )\n    {\n      $webRequest.Credentials = Get-TwitterCredentials\n      $webRequest.PreAuthenticate = $true;\n    }\n    $webRequest.ContentType = \"application/x-www-form-urlencoded\";\n    $webRequest.Method = \"POST\";\n    $webRequest.Headers.Add(\"X-Twitter-Client\", \"PoshTweet\");\n    $webRequest.Headers.Add(\"X-Twitter-Version\", \"1.0\");\n    $webRequest.Headers.Add(\"X-Twitter-URL\", \"http://devcentral.f5.com/s/poshtweet\");\n  \n    [byte[]]$bytes = [System.Text.Encoding]::UTF8.GetBytes($data);\n    $webRequest.ContentLength = $bytes.Length;\n    [System.IO.Stream]$reqStream = $webRequest.GetRequestStream();\n    $reqStream.Write($bytes, 0, $bytes.Length);\n    $reqStream.Flush();\n    [System.Net.WebResponse]$resp = $webRequest.GetResponse();\n    $rs = $resp.GetResponseStream();\n    [System.IO.StreamReader]$sr = New-Object System.IO.StreamReader -argumentList $rs;\n    [string]$results = $sr.ReadToEnd();\n    $results;\n  }\n}\n\n#============================================================================\n# Status Functions\n#============================================================================\n#----------------------------------------------------------------------------\n# Helper functions\n#----------------------------------------------------------------------------\nfunction Process-TwitterStatus()\n{\n  param([string]$sxml = $null, [bool]$raw = $false);\n  if ( $sxml )\n  {\n    if ( $raw )\n    {\n      $sxml;\n    }\n    else\n    {\n      [xml]$xml = $sxml;\n      if ( $xml.statuses.status )\n      {\n        $stats = $xml.statuses.status;\n      }\n      elseif ($xml.status )\n      {\n        $stats = $xml.status;\n      }\n      $stats | Foreach-Object -process {\n        $info = \"by \" + $_.user.screen_name + \", \" + $_.created_at;\n        if ( $_.source ) { $info = $info + \" via \" + $_.source; }\n        if ( $_.in_reply_to_screen_name ) { $info = $info + \" in reply to \" + $_.in_reply_to_screen_name; }\n        \"-------------------------\";\n        $_.text;\n        $info;\n      };\n      \"-------------------------\";\n    }\n  }\n}\n\n#----------------------------------------------------------------------------\n# public_timeline\n#----------------------------------------------------------------------------\nfunction Get-TwitterPublicTimeline()\n{\n  param([bool]$raw = $false);\n  $results = Execute-HTTPGetCommand \"http://twitter.com/statuses/public_timeline.xml\";\n  Process-TwitterStatus $results $raw;\n}\n\n#----------------------------------------------------------------------------\n# friends_timeline\n#----------------------------------------------------------------------------\nfunction Get-TwitterFriendsTimeline()\n{\n  param (\n    [string]$since = $null, \n    [int]$since_id = $null,\n    [int]$count = $null,\n  [int]$page = $null,\n    [bool]$raw = $false\n  );\n  if ( $since )\n  {\n    $args = \"?since=$since\";\n  }\n  if ( $since_id )\n  {\n    if ( $args ) { $args = \"${args}&\" } else { $args = \"?\" }\n    $args = \"${args}since_id=$since_id\";\n  }\n  if ( $count )\n  {\n    if ( $args ) { $args = \"${args}&\" } else { $args = \"?\" }\n    $args = \"${args}count=$count\";\n  }\n  if ( $page )\n  {\n    if ( $args ) { $args = \"${args}&\" } else { $args = \"?\" }\n    $args = \"${args}page=$page\";\n  }\n  \n  Write-Host \"Requesting URI: http://twitter.com/statuses/friends_timeline.xml${args}\";\n  $results = Execute-HTTPGetCommand \"http://twitter.com/statuses/friends_timeline.xml${args}\";\n  Process-TwitterStatus $results $raw\n}\n\n#----------------------------------------------------------------------------\n#user_timeline\n#----------------------------------------------------------------------------\nfunction Get-TwitterUserTimeline()\n{\n  param([string]$username = $null, [bool]$raw = $false);\n  if ( $username )\n  {\n    $username = \"/$username\";\n  }\n  $results = Execute-HTTPGetCommand \"http://twitter.com/statuses/user_timeline$username.xml\";\n  Process-TwitterStatus $results $raw\n}\n\n#----------------------------------------------------------------------------\n# show\n#----------------------------------------------------------------------------\nfunction Get-TwitterStatus()\n{\n  param([string]$id, [bool]$raw = $false);\n  if ( $id )\n  {\n    $results = Execute-HTTPGetCommand \"http://twitter.com/statuses/show/\" + $id + \".xml\";\n    Process-TwitterStatus $results $raw;\n  }\n}\n\n#----------------------------------------------------------------------------\n# update\n#----------------------------------------------------------------------------\nfunction Set-TwitterStatus()\n{\n  param([string]$status, [int]$in_reply_to_status_id = $null, [bool]$raw = $false);\n  $encstatus = [System.Web.HttpUtility]::UrlEncode(\"$status\");\n\n  $args = \"status=$encstatus\";\n  if ( $in_reply_to_status_id )\n  {\n    $args += \"&in_reply_to_status_id=${in_reply_to_status_id}\";\n  }\n  $results = Execute-HTTPPostCommand \"http://twitter.com/statuses/update.xml\" $args;\n  Process-TwitterStatus $results $raw;\n}\n\n#----------------------------------------------------------------------------\n# replies\n#----------------------------------------------------------------------------\nfunction Get-TwitterReplies()\n{\n  param([bool]$raw = $false);\n  $results = Execute-HTTPGetCommand \"http://twitter.com/statuses/replies.xml\";\n  Process-TwitterStatus $results $raw;\n}\n\n#----------------------------------------------------------------------------\n# destroy\n#----------------------------------------------------------------------------\nfunction Destroy-TwitterStatus()\n{\n  param([string]$id = $null);\n  if ( $id )\n  {\n    Execute-HTTPPostCommand \"http://twitter.com/statuses/destroy/$id.xml\", \"id=$id\";\n  }\n}\n\n#============================================================================\n# User Functions\n#============================================================================\n#----------------------------------------------------------------------------\n# Helper functions\n#----------------------------------------------------------------------------\nfunction Process-TwitterUsers()\n{\n  param([string]$sxml = $null, [bool]$raw = $false);\n  if ( $sxml )\n  {\n    if ( $raw )\n    {\n      $sxml;\n    }\n    else\n    {\n      [xml]$xml = $sxml;\n      if ( $xml.users.user )\n      {\n        $user = $xml.users.user;\n      }\n      elseif ($xml.user )\n      {\n        $user = $xml.user;\n      }\n      $user | Foreach-Object -process {\n        $id = $_.id;\n        $screen_name = $_.screen_name;\n        $name = $_.name;\n        $desc = $_.description;\n        $url = $_.url;\n        $followers_count = $_.followers_count;\n        $last_status = $_.status.text;\n        \n        \"-------------------------\";\n        \"$screen_name / $name (# $id , $followers_count followers) / $url\";\n        \"Bio: $desc\";\n        \"Tweet: $last_status\";\n      };\n      \"-------------------------\";\n    }\n  }\n}\n\n#----------------------------------------------------------------------------\n# friends\n#----------------------------------------------------------------------------\nfunction Get-TwitterFriends()\n{\n  param([string]$id_or_screenname, [string]$page = $null, [bool]$raw = $false);\n  if ( $id_or_screenname )\n  {\n    $id_or_screenname = \"/$id_or_screenname\";\n  }\n  if ( $page )\n  {\n    $page = \"?page=$page\";\n  }\n  Write-Host \"Requesting: http://twitter.com/statuses/friends$id_or_screenname.xml$page\";\n  $results = Execute-HTTPGetCommand \"http://twitter.com/statuses/friends$id_or_screenname.xml$page\";\n  Process-TwitterUsers $results $raw;\n}\n\n#----------------------------------------------------------------------------\n# followers\n#----------------------------------------------------------------------------\nfunction Get-TwitterFollowers()\n{\n  param([string]$id_or_screenname, [string]$page = $null, [bool]$raw = $false);\n  if ( $id_or_screenname )\n  {\n    $id_or_screenname = \"/$id_or_screenname\";\n  }\n  if ( $page )\n  {\n    $page = \"?page=$page\";\n  }\n  Write-Host \"Requesting: http://twitter.com/statuses/followers$id_or_screenname.xml$page\";\n  $results = Execute-HTTPGetCommand \"http://twitter.com/statuses/followers$id_or_screenname.xml$page\";\n  Process-TwitterUsers $results $raw;\n}\n\n#----------------------------------------------------------------------------\n# show\n#----------------------------------------------------------------------------\nfunction Get-TwitterUser()\n{\n  param([string]$id = $null, [string]$email = $null, [bool]$raw = $false);\n  $url = $null;\n  if ( $id )\n  {\n    $url = \"http://twitter.com/users/show/$id.xml\";\n  }\n  elseif ( $email )\n  {\n    $url = \"http://twitter.com/users/show.xml?email=$email\";\n  }\n  if ( $url )\n  {\n    $results = Execute-HTTPGetCommand $url;\n    PRocess-TwitterUsers $results $raw;\n  }\n}\n\n#============================================================================\n# Direct Message Functions\n#============================================================================\n#----------------------------------------------------------------------------\n# Helper functions\n#----------------------------------------------------------------------------\nfunction Process-TwitterDirectMessages()\n{\n  param([string]$sxml = $null, [bool]$raw = $false);\n  if ( $sxml )\n  {\n    if ( $raw )\n    {\n      $sxml;\n    }\n    else\n    {\n      [xml]$xml = $sxml;\n      if ( $xml.{direct-messages}.direct_message )\n      {\n        $dm = $xml.{direct-messages}.direct_message;\n      }\n      elseif ($xml.direct_message )\n      {\n        $dm = $xml.direct_message;\n      }\n      $dm | Foreach-Object -process {\n        $id = $_.id;\n        $text = $_.text;\n        $sender_screen_name = $_.sender_screen_name;\n        $name = $_.sender.name;\n        $created_at = $_.created_at;\n        \"-------------------------\";\n        \"(DM #$id) $text\";\n        \"by $sender_screen_name / $name on $created_at\";\n      };\n      \"-------------------------\";\n    }\n  }\n}\n\n#----------------------------------------------------------------------------\n# direct_messages\n#----------------------------------------------------------------------------\nfunction Get-TwitterDirectMessages()\n{\n  param([string]$since = $null, [string]$since_id = $null, [string]$page = $null, [bool]$raw = $false);\n  $args = $null;\n  if ( $since )\n  {\n    $args = \"?since=$since\";\n  }\n  elseif ( $since_id )\n  {\n    $args = \"?since_id=$since_id\";\n  }\n  elseif ( $page )\n  {\n    $args = \"?page=$page\";\n  }\n  $results = Execute-HTTPGetCommand \"http://twitter.com/direct_messages.xml$args\";\n  Process-TwitterDirectMessages $results $raw;\n}\n\n#----------------------------------------------------------------------------\n# sent\n#----------------------------------------------------------------------------\nfunction Get-TwitterSentDirectMessages()\n{\n  param([string]$since = $null, [string]$since_id = $null, [string]$page = $null, [bool]$raw = $false);\n  $args = $null;\n  if ( $since )\n  {\n    $args = \"?since=$since\";\n  }\n  elseif ( $since_id )\n  {\n    $args = \"?since_id=$since_id\";\n  }\n  elseif ( $page )\n  {\n    $args = \"?page=$page\";\n  }\n  $results = Execute-HTTPGetCommand \"http://twitter.com/direct_messages/sent.xml$args\";\n  Process-TwitterDirectMessages $results $raw;\n}\n\n#----------------------------------------------------------------------------\n# new\n#----------------------------------------------------------------------------\nfunction New-TwitterDirectMessage()\n{\n  param([string]$user = $null, [string]$text = $null, [bool]$raw = $false);\n  if ( $user -and $text )\n  {\n    $enctext = [System.Web.HttpUtility]::UrlEncode(\"$text\");\n    $results = Execute-HTTPPostCommand \"http://twitter.com/direct_messages/new.xml\" \"user=$user&text=$enctext\"\n    Process-TwitterDirectMessages $results $raw;\n  }\n}\n\n#----------------------------------------------------------------------------\n# destroy\n#----------------------------------------------------------------------------\nfunction Destroy-TwitterDirectMessage()\n{\n  param([string]$id = $null);\n  if ( $id )\n  {\n    $results = Execute-HTTPPostCommand \"http://twitter.com/direct_messages/destroy/$id.xml\" \"id=$id\";\n  }\n}\n\n#============================================================================\n# Friendship Functions\n#============================================================================\n#----------------------------------------------------------------------------\n# create\n#----------------------------------------------------------------------------\nfunction Create-TwitterFriendship()\n{\n  param([string]$id = $null, [bool]$follow = $true, [bool]$raw = $false);\n  if ( $id )\n  {\n  $follow = $follow.ToString().ToLower();\n    $results = Execute-HTTPPostCommand \"http://twitter.com/friendsips/create/${id}.xml\" \"id=${id}&follow=${follow}\"\n    Process-TwitterUsers $results $raw;\n  }\n}\n\n#----------------------------------------------------------------------------\n# destroy\n#----------------------------------------------------------------------------\nfunction Destroy-TwitterFriendship()\n{\n  param([string]$id = $null, [bool]$raw = $false);\n  if ( $id )\n  {\n    $results = Execute-HTTPPostCommand \"http://twitter.com/friendships/destroy/${id}.xml\" \"id=${id}\"\n    $results;\n    Process-TwitterUsers $results $raw;\n  }\n}\n\n#----------------------------------------------------------------------------\n# exists\n#----------------------------------------------------------------------------\nfunction Get-TwitterFriendshipExists\n{\n  param([string]$user_a = $null, [string]$user_b = $null);\n  if ( $user_a -and $user_b )\n  {\n    $results = Execute-HTTPGetCommand \"http://twitter.com/friendships/exists.xml?user_a=${user_a}&user_b=${user_b}\";\n  $results;\n  }\n}\n\n#============================================================================\n# Social Graph Functions\n#============================================================================\n#----------------------------------------------------------------------------\n# Helper Functions\n#----------------------------------------------------------------------------\nfunction Process-Ids()\n{\n  param([string]$sxml = $null, [bool]$raw = $false);\n  if ( $sxml )\n  {\n    if ( $raw )\n    {\n      $sxml;\n    }\n    else\n    {\n      [xml]$x = $sxml;\n      $i = 1;\n      $x.ids.id | ForEach-Object -Process {\n        $info = \"[$i] : \" + $_;\n        $info;\n        $i++;\n      }\n    }\n  }\n}\n\n#----------------------------------------------------------------------------\n# ids (friends)\n#----------------------------------------------------------------------------\nfunction Get-TwitterSocialGraphFriendIds()\n{\n  param([string]$id = $null, [bool]$raw = $false);\n  $args = \"\";\n  if ( $id )\n  {\n    $args = \"?id=${id}\";\n  }\n  $results = Execute-HTTPGetCommand \"http://twitter.com/friends/ids.xml$args\";\n  Process-Ids $results $raw;\n}\n\n\n#----------------------------------------------------------------------------\n# ids (followers)\n#----------------------------------------------------------------------------\nfunction Get-TwitterSocialGraphFollowerIds()\n{\n  param([string]$id = $null, [bool]$raw = $false);\n  $args = \"\";\n  if ( $id )\n  {\n    $args = \"?id=${id}\";\n  }\n  $results = Execute-HTTPGetCommand \"http://twitter.com/followers/ids.xml$args\";\n  Process-Ids $results $raw;\n}\n\n\n#============================================================================\n# Account Functions\n#============================================================================\n#----------------------------------------------------------------------------\n# helper functions\n#----------------------------------------------------------------------------\nfunction Is-ValidHexColor()\n{\n  param([string]$color_in_hex = $null)\n  [bool]$valid = $false;\n  if ( $color_in_hex )\n  {\n    [regex]$regex3 = \"[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]\";\n    [regex]$regex6 = \"[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]\";\n    if ( ($color_in_hex.Length -eq 3) -and ($color_in_hex -match $regex3) )\n    {\n      $valid = $true;\n    }\n    elseif ( ($color_in_hex.Length -eq 6) -and ($color_in_hex -match $regex6) )\n    {\n      $valid = $true;\n    }\n  }\n  $valid;\n}\n\n#----------------------------------------------------------------------------\n# verify_credentials\n#----------------------------------------------------------------------------\nfunction Verify-TwitterCredentials()\n{\n  $results = Execute-HTTPGetCommand \"http://twitter.com/account/verify_credentials.xml\";\n  $results;\n}\n\n#----------------------------------------------------------------------------\n# end_session\n#----------------------------------------------------------------------------\nfunction End-TwitterSession()\n{\n  $results = Execute-HTTPPostCommand \"http://twitter.com/account/end_session.xml\" \"\";\n  $results;\n}\n\n#----------------------------------------------------------------------------\n# update_delivery_device\n#----------------------------------------------------------------------------\nfunction Set-TwitterDeliveryDevice()\n{\n  param([string]$device = $null);\n  if ( $device )\n  {\n    if ( $device.Equals(\"sms\") -or $device.Equals(\"im\") -or $device.Equals(\"none\") )\n    {\n      $results = Execute-HTTPPostCommand \"http://twitter.com/account/update_delivery_device.xml?device=$device\" \"device=$device\";\n      $results;\n    }\n    else\n    {\n        Write-Error \"device must be either sms, im, or none!\"\n    }\n  }\n}\n\n#----------------------------------------------------------------------------\n# update_profile_colors\n#----------------------------------------------------------------------------\nfunction Set-TwitterProfileColors()\n{\n  param(\n    [string]$background_color = $null,\n    [string]$text_color = $null,\n    [string]$link_color = $null,\n    [string]$sidebar_fill_color = $null,\n    [string]$sidebar_border_color = $null);\n  $args = $null;\n  if ( $background_color )\n  {\n    if ( Is-ValidHexColor $background_color )\n    {\n      if ( $args ) { $args = \"$args&\"; }\n      $args = \"${args}profile_background_color=$background_color\";\n    }\n    else\n    {\n      Write-Error \"background_color '$background_color' must be a 3 or 6 valid hexadecimal value!\";\n    }\n  }\n  if ( $text_color )\n  {\n    if ( Is-ValidHexColor $text_color )\n    {\n      if ( $args ) { $args = \"$args&\"; }\n      $args = \"${args}profile_text_color=$text_color\";\n    }\n    else\n    {\n      Write-Error \"text_color '$text_color' must be a 3 or 6 valid hexadecimal value!\";\n    }\n  }\n  if ( $link_color )\n  {\n    if ( Is-ValidHexColor $link_color )\n    {\n      if ( $args ) { $args = \"$args&\"; }\n      $args = \"${args}profile_link_color=$link_color\";\n    }\n    else\n    {\n      Write-Error \"link_color '$link_color' must be a 3 or 6 valid hexadecimal value!\";\n    }\n  }\n  if ( $sidebar_fill_color )\n  {\n    if ( Is-ValidHexColor $sidebar_fill_color )\n    {\n      if ( $args ) { $args = \"$args&\"; }\n      $args = \"${args}profile_sidebar_fill_color=$sidebar_fill_color\";\n    }\n    else\n    {\n      Write-Error \"sidebar_fill_color '$sidebar_fill_color' must be a 3 or 6 valid hexadecimal value!\";\n    }\n  }\n  if ( $sidebar_border_color )\n  {\n    if ( Is-ValidHexColor $sidebar_border_color )\n    {\n      if ( $args ) { $args = \"$args&\"; }\n      $args = \"${args}profile_sidebar_border_color=$sidebar_border_color\";\n    }\n    else\n    {\n      Write-Error \"sidebar_border_color '$sidebar_border_color' must be a 3 or 6 valid hexadecimal value!\";\n    }\n  }\n  if ( $args )\n  {\n    Write-Host \"http://twitter.com/account/update_profile_colors.xml - $args\";\n    $results = Execute-HTTPPostCommand \"http://twitter.com/account/update_profile_colors.xml\" $args;\n    $results;\n  }\n}\n\n#----------------------------------------------------------------------------\n# update_profile_image\n#----------------------------------------------------------------------------\nfunction Set-TwitterProfileImage()\n{\n  param([string]$image = $null);\n  if ( $image )\n  {\n    $results = Execute-HTTPPostCommand \"http://twitter.com/account/update_profile_image.xml\" \"image=$image\";\n    $results;\n  }\n}\n\n#----------------------------------------------------------------------------\n# update_profile_background_image\n#----------------------------------------------------------------------------\nfunction Set-TwitterProfileBackgroundImage()\n{\n  param([string]$image = $null);\n  if ( $image )\n  {\n    $results = Execute-HTTPPostCommand \"http://twitter.com/account/update_profile_background_image.xml\" \"image=$image\";\n    $results;\n  }\n}\n\n#----------------------------------------------------------------------------\n# rate_limit_status\n#----------------------------------------------------------------------------\nfunction Get-TwitterRateLimitStatus()\n{\n  param([bool]$raw = $false);\n  $sXml = Execute-HTTPGetCommand \"http://twitter.com/account/rate_limit_status.xml\";\n  if ( $sXml )\n  {\n    if ( $raw )\n  {\n    $sXml;\n  }\n  else\n  {\n    [xml]$results = $sXml;\n      $remaining_hits = $results.hash.{remaining-hits}.get_InnerText();\n      $hourly_limit = $results.hash.{hourly-limit}.get_InnerText();\n      $reset_time_in_seconds = $results.hash.{reset-time-in-seconds}.get_InnerText();\n      $reset_time = $results.hash.{reset-time}.get_InnerText();\n      \"Remaining Hits: $remaining_hits\";\n      \"Hourly Limit  : $hourly_limit\";\n      \"Reset Time (s): $reset_time_in_seconds s.\";\n      \"Reset Time    : $reset_time\";\n    }\n  }\n}\n\n#----------------------------------------------------------------------------\n# update_profile\n#----------------------------------------------------------------------------\nfunction Set-TwitterProfile()\n{\n  param(\n    [string]$name = $null,\n    [string]$email = $null,\n    [string]$url = $null,\n    [string]$location = $null,\n    [string]$description = $null);\n  $args = $null;\n  if ( $name )\n  {\n    if ( $args ) { $args = \"$args&\"; }\n    $args = \"${args}name=$name\";\n  }\n  if ( $email )\n  {\n    if ( $args ) { $args = \"$args&\"; }\n    $args = \"${args}email=$email\";\n  }\n  if ( $url )\n  {\n    if ( $args ) { $args = \"$args&\"; }\n    $args = \"${args}url=$url\";\n  }\n  if ( $location )\n  {\n    if ( $args ) { $args = \"$args&\"; }\n    $args = \"${args}location=$location\";\n  }\n  if ( $description )\n  {\n    if ( $args ) { $args = \"$args&\"; }\n    $args = \"${args}description=$description\";\n  }\n  if ( $args )\n  {\n    $results = Execute-HTTPPostCommand \"http://twitter.com/account/update_profile.xml\" $args;\n    $results;\n  }\n}\n\n#============================================================================\n# Favorite Functions\n#============================================================================\n#----------------------------------------------------------------------------\n# favorites\n#----------------------------------------------------------------------------\nfunction Get-TwitterFavorites()\n{\n  param([string]$id, [string]$page = $null, [bool]$raw = $false);\n  if ( $id )\n  {\n    $id = \"/$id\";\n  }\n  if ( $page )\n  {\n    $page = \"?page=$page\";\n  }\n  $results = Execute-HTTPGetCommand \"http://twitter.com/favorites${id}.xml${page}\";\n  Process-TwitterStatus $results $raw;\n}\n\n#----------------------------------------------------------------------------\n# create\n#----------------------------------------------------------------------------\nfunction Create-TwitterFavorite()\n{\n  param([string]$id, [bool]$raw = $false);\n  if ( $id )\n  {\n    $id = \"/$id\";\n  }\n  $results = Execute-HTTPPostCommand \"http://twitter.com/favorites/create${id}.xml\" \"id=${id}\";\n  Process-TwitterStatus $results $raw;\n}\n\n#----------------------------------------------------------------------------\n# destroy\n#----------------------------------------------------------------------------\nfunction Destroy-TwitterFavorite()\n{\n  param([string]$id, [bool]$raw = $false);\n  if ( $id )\n  {\n    $id = \"/$id\";\n  }\n  $results = Execute-HTTPPostCommand \"http://twitter.com/favorites/destroy${id}.xml\" \"id=${id}\";\n  Process-TwitterStatus $results $raw;\n}\n\n\n#============================================================================\n# Notification Functions\n#============================================================================\n#----------------------------------------------------------------------------\n# follow\n#----------------------------------------------------------------------------\nfunction Follow-TwitterUser()\n{\n  param([string]$id, [bool]$raw = $false);\n  if ( $id )\n  {\n    $results = Execute-HTTPPostCommand \"http://twitter.com/notifications/follow/${id}.xml\" \"id=${id}\";\n    Process-TwitterUsers $results $raw;\n  }\n}\n\n#----------------------------------------------------------------------------\n# leave\n#----------------------------------------------------------------------------\nfunction Leave-TwitterUser()\n{\n  param([string]$id, [bool]$raw = $false);\n  if ( $id )\n  {\n    $results = Execute-HTTPPostCommand \"http://twitter.com/notifications/leave/${id}.xml\" \"id=${id}\";\n    Process-TwitterUsers $results $raw;\n  }\n}\n\n#============================================================================\n# Block Functions\n#============================================================================\n#----------------------------------------------------------------------------\n# create\n#----------------------------------------------------------------------------\nfunction Create-TwitterBlock()\n{\n  param([string]$id, [bool]$raw = $false);\n  if ( $id )\n  {\n    $results = Execute-HTTPPostCommand \"http://twitter.com/blocks/create/${id}.xml\" \"id=${id}\";\n    Process-TwitterUsers $results $raw;\n  }\n}\n\n#----------------------------------------------------------------------------\n# destroy\n#----------------------------------------------------------------------------\nfunction Destroy-TwitterBlock()\n{\n  param([string]$id, [bool]$raw = $false);\n  if ( $id )\n  {\n    $results = Execute-HTTPPostCommand \"http://twitter.com/blocks/destroy/${id}.xml\" \"id=${id}\";\n    Process-TwitterUsers $results $raw;\n  }\n}\n\n\n#============================================================================\n# Help Functions\n#============================================================================\n#----------------------------------------------------------------------------\n# test\n#----------------------------------------------------------------------------\nfunction Get-TwitterHelpTest()\n{\n  $results = Execute-HTTPGetCommand \"http://twitter.com/help/test.xml\";\n  $results;\n}\n\n#----------------------------------------------------------------------------\n# downtime_schedule\n#----------------------------------------------------------------------------\nfunction Get-TwitterDowntimeSchedule()\n{\n  $results = Execute-HTTPGetCommand \"http://twitter.com/help/downtime_schedule.xml\";\n  $results;\n}\n\n#============================================================================\n# TwitterCounter\n#============================================================================\n#----------------------------------------------------------------------------\n# Get-TwitterCounterStats\n#----------------------------------------------------------------------------\nfunction Get-TwitterCounterStats()\n{\n  param([string]$username = $null, [int]$results = 14, [bool]$raw = $false);\n  $output = \"xml\";\n  $stats = $null;\n  if ( $username )\n  {\n    $stats = Execute-HTTPGetCommand \"http://twittercounter.com/api/?username=$username&output=$output&results=$results\"\n  }\n  if ( !$raw )\n  {\n    $stats = [xml]$stats;\n    $stats.twittercounter\n  }\n  else\n  {\n    $stats;\n  }\n}\n\n#============================================================================\n# Utilities\n#============================================================================\nfunction Get-GroupMemberList()\n{\n  param([string]$url = $null, [string]$tagstart = $null);\n  if ( $tagstart -eq $null ) { $tagstart = \"entrybody\"; }\n  \n  # Posh Twitter Users \"http://www.mindofroot.com/powershell-twitterers/\";  \n  if ( $url )\n  {\n    $site = Execute-HTTPGetRequest $url;\n    \n    $previous = @()\n    $start = $site.IndexOf('
')\n $site = $site.substring($start)\n $start = $site.IndexOf('') + 5\n \n [xml]$doc = $site.substring(0,$end) \n $results = $doc.ul.li | select @{name='Name';Expression={$_.a.'#text'}}, @{name='TwitterURL';Expression={$_.a.href}}, @{name='UserName';Expression={$_.a.href -replace 'http://twitter.com/'}}\n $results = $results[1..($results.count-1)]\n return $results\n }\n}
","body@stringLength":"36356","rawBody":"

Problem this snippet solves:

Here is a set of PowerShell functions that give access to the Twitter web based APIs allowing you to interact with the Twitter service from within Windows PowerShell.

How to use this snippet:

Twitter Functions

\n

Internal Helpers

\n
function Shrink-Url()\nfunction Shrink-Links()\nfunction Set-TwitterCredentials()\nfunction Get-TwitterCredentials()\nfunction Execute-HTTPGetCommand()\nfunction Execute-HTTPPostCommand()\nfunction Process-TwitterStatus()\n
\n

Status

\n
function Get-TwitterPublicTimeline()\nfunction Get-TwitterFriendsTimeline()\nfunction Get-TwitterUserTimeline()\nfunction Get-TwitterStatus()\nfunction Set-TwitterStatus()\nfunction Get-TwitterReplies()\nfunction Destroy-TwitterStatus()\n
\n

User

\n
function Process-TwitterUsers()\nfunction Get-TwitterFriends()\nfunction Get-TwitterFollowers()\nfunction Get-TwitterUser()\n
\n

Direct Messages

\n
function Process-TwitterDirectMessages()\nfunction Get-TwitterDirectMessages()\nfunction Get-TwitterSentDirectMessages()\nfunction New-TwitterDirectMessage()\nfunction Destroy-TwitterDirectMessage()\n
\n

Friendship

\n
function Get-TwitterFriendshipExists\nfunction Process-Ids()\nfunction Get-TwitterSocialGraphFriendIds()\nfunction Get-TwitterSocialGraphFollowerIds()\n
\n

Account

\n
function Is-ValidHexColor()\nfunction Verify-TwitterCredentials()\nfunction End-TwitterSession()\nfunction Set-TwitterDeliveryDevice()\nfunction Set-TwitterProfileColors()\nfunction Set-TwitterProfileImage()\nfunction Set-TwitterProfileBackgroundImage()\nfunction Get-TwitterRateLimitStatus()\nfunction Set-TwitterProfile()\n
\n

Favorites

\n
function Get-TwitterFavorites()\nfunction Create-TwitterFavorite()\nfunction Destroy-TwitterFavorite()\n
\n

Notification

\n
function Follow-TwitterUser()\nfunction Leave-TwitterUser()\n
\n

Block

\n
function Create-TwitterBlock()\nfunction Destroy-TwitterBlock()\n
\n

Help

\n
function Get-TwitterHelpTest()\nfunction Get-TwitterDowntimeSchedule()\n
\n

3rd Party Services

\n
function Get-TwitterCounterStats()\nfunction Get-GroupMemberList()\n

Code :

#----------------------------------------------------------------------------\n# The contents of this file are subject to the \"END USER LICENSE AGREEMENT \n# FOR F5 Software Development Kit for iControl\"; you may not use this file \n# except in compliance with the License. The License is included in the \n# iControl Software Development Kit.\n#\n# Software distributed under the License is distributed on an \"AS IS\"\n# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See\n# the License for the specific language governing rights and limitations\n# under the License.\n#\n# The Original Code is iControl Code and related documentation\n# distributed by F5.\n#\n# The Initial Developer of the Original Code is F5 Networks,\n# Inc. Seattle, WA, USA. Portions created by F5 are Copyright (C) 1996-2008 \n# F5 Networks, Inc. All Rights Reserved.  iControl (TM) is a registered \n# trademark of F5 Networks, Inc.\n#\n# Alternatively, the contents of this file may be used under the terms\n# of the GNU General Public License (the \"GPL\"), in which case the\n# provisions of GPL are applicable instead of those above.  If you wish\n# to allow use of your version of this file only under the terms of the\n# GPL and not to allow others to use your version of this file under the\n# License, indicate your decision by deleting the provisions above and\n# replace them with the notice and other provisions required by the GPL.\n# If you do not delete the provisions above, a recipient may use your\n# version of this file under either the License or the GPL.\n#----------------------------------------------------------------------------\n[void] [Reflection.Assembly]::LoadWithPartialName(\"System.Web\") \n[void] [Reflection.Assembly]::LoadWithPartialName(\"System.Text\") \n[System.Net.ServicePointManager]::Expect100Continue = $false;\n\n$script:g_creds = $null;\n#============================================================================\n# Shared Functions\n#============================================================================\n#----------------------------------------------------------------------------\n# function Shrink-Url\n#----------------------------------------------------------------------------\nfunction Shrink-Url()\n{\n  param([string]$longurl = $null, [string]$provider = \"tinyurl\");\n  $shorturl = $null;\n  if ( $longurl )\n  {\n    switch ($provider.ToLower())\n    {\n      \"is.gd\" {\n        $shorturl = Execute-HTTPGetCommand \"http://is.gd/api.php?longurl=$longurl\";\n      }\n      \"tinyurl\" {\n        $shorturl = Execute-HTTPGetCommand \"http://tinyurl.com/api-create.php?url=$longurl\";\n      }\n      \"snipurl\" {\n        $shorturl = Execute-HTTPGetCommand \"http://snipurl.com/site/snip?r=simple&link=$longurl\";\n      }\n      default {\n        $shorturl = Execute-HTTPGetCommand \"http://tinyurl.com/api-create.php?url=$longurl\";\n      }\n    }\n  }\n  $shorturl;\n}\n\n#----------------------------------------------------------------------------\n# function Shrink-Links\n#----------------------------------------------------------------------------\nfunction Shrink-Links()\n{\n  param([string]$text = $null, [string]$provider = \"tinyurl\");\n\n  [regex]$regex=\"(http|ftp|https):\\/\\/[\\w\\-_]+(\\.[\\w\\-_]+)+([\\w\\-\\.,@?^=%&:/~\\+#]*[\\w\\-\\@?^=%&/~\\+#])?\"\n\n  if ($text -match $regex)\n  {\n    $link = $matches[0]\n  }\n  \n  #if an embedded url was found, convert it to a shortened link\n  if ($link)\n  {\n    $shrunklink = Shrink-Url $link\n    $text = $text.Replace($link, $shrunklink)\n  }\n  $text;\n}\n\n#----------------------------------------------------------------------------\n# function Set-TwitterCredentials\n#----------------------------------------------------------------------------\nfunction Set-TwitterCredentials()\n{\n  param([string]$user = $null, [string]$pass = $null);\n  if ( $user -and $pass )\n  {\n    $script:g_creds = New-Object System.Net.NetworkCredential -argumentList ($user, $pass);\n  }\n  else\n  {\n    $creds = Get-TwitterCredentials;\n  }\n}\n\n#----------------------------------------------------------------------------\n# function Get-TwitterCredentials\n#----------------------------------------------------------------------------\nfunction Get-TwitterCredentials()\n{\n  if ( $null -eq $g_creds )\n  {\n    trap { Write-Error \"ERROR: You must enter your Twitter credentials for PoshTweet to work!\"; continue; }\n    $c = Get-Credential\n    if ( $c )\n    {\n      $user = $c.GetNetworkCredential().Username;\n      $pass = $c.GetNetworkCredential().Password;\n      $script:g_creds = New-Object System.Net.NetworkCredential -argumentList ($user, $pass);\n    }\n  }\n  $script:g_creds;\n}\n\n#----------------------------------------------------------------------------\n# function Execute-HTTPGetCommand\n#----------------------------------------------------------------------------\nfunction Execute-HTTPGetCommand()\n{\n  param([string] $url = $null);\n  if ( $url )\n  {\n    [System.Net.WebClient]$webClient = New-Object System.Net.WebClient\n    if ( $url.ToLower().Contains(\"twitter.com\") )\n    {\n      $webClient.Credentials = Get-TwitterCredentials\n    }\n  \n    [System.IO.Stream]$stream = $webClient.OpenRead($url);\n    [System.IO.StreamReader]$sr = New-Object System.IO.StreamReader -argumentList $stream;\n    [string]$results = $sr.ReadToEnd();\n    $results;\n  }\n}\n\n#----------------------------------------------------------------------------\n# function Execute-HTTPPostCommand\n#----------------------------------------------------------------------------\nfunction Execute-HTTPPostCommand()\n{\n  param([string] $url = $null, [string] $data = $null);\n\n  if ( $url -and $data )\n  {\n    [System.Net.WebRequest]$webRequest = [System.Net.WebRequest]::Create($url);\n    $webRequest.ServicePoint.Expect100Continue = $false;\n    if ( $url.ToLower().Contains(\"twitter.com\") )\n    {\n      $webRequest.Credentials = Get-TwitterCredentials\n      $webRequest.PreAuthenticate = $true;\n    }\n    $webRequest.ContentType = \"application/x-www-form-urlencoded\";\n    $webRequest.Method = \"POST\";\n    $webRequest.Headers.Add(\"X-Twitter-Client\", \"PoshTweet\");\n    $webRequest.Headers.Add(\"X-Twitter-Version\", \"1.0\");\n    $webRequest.Headers.Add(\"X-Twitter-URL\", \"http://devcentral.f5.com/s/poshtweet\");\n  \n    [byte[]]$bytes = [System.Text.Encoding]::UTF8.GetBytes($data);\n    $webRequest.ContentLength = $bytes.Length;\n    [System.IO.Stream]$reqStream = $webRequest.GetRequestStream();\n    $reqStream.Write($bytes, 0, $bytes.Length);\n    $reqStream.Flush();\n    [System.Net.WebResponse]$resp = $webRequest.GetResponse();\n    $rs = $resp.GetResponseStream();\n    [System.IO.StreamReader]$sr = New-Object System.IO.StreamReader -argumentList $rs;\n    [string]$results = $sr.ReadToEnd();\n    $results;\n  }\n}\n\n#============================================================================\n# Status Functions\n#============================================================================\n#----------------------------------------------------------------------------\n# Helper functions\n#----------------------------------------------------------------------------\nfunction Process-TwitterStatus()\n{\n  param([string]$sxml = $null, [bool]$raw = $false);\n  if ( $sxml )\n  {\n    if ( $raw )\n    {\n      $sxml;\n    }\n    else\n    {\n      [xml]$xml = $sxml;\n      if ( $xml.statuses.status )\n      {\n        $stats = $xml.statuses.status;\n      }\n      elseif ($xml.status )\n      {\n        $stats = $xml.status;\n      }\n      $stats | Foreach-Object -process {\n        $info = \"by \" + $_.user.screen_name + \", \" + $_.created_at;\n        if ( $_.source ) { $info = $info + \" via \" + $_.source; }\n        if ( $_.in_reply_to_screen_name ) { $info = $info + \" in reply to \" + $_.in_reply_to_screen_name; }\n        \"-------------------------\";\n        $_.text;\n        $info;\n      };\n      \"-------------------------\";\n    }\n  }\n}\n\n#----------------------------------------------------------------------------\n# public_timeline\n#----------------------------------------------------------------------------\nfunction Get-TwitterPublicTimeline()\n{\n  param([bool]$raw = $false);\n  $results = Execute-HTTPGetCommand \"http://twitter.com/statuses/public_timeline.xml\";\n  Process-TwitterStatus $results $raw;\n}\n\n#----------------------------------------------------------------------------\n# friends_timeline\n#----------------------------------------------------------------------------\nfunction Get-TwitterFriendsTimeline()\n{\n  param (\n    [string]$since = $null, \n    [int]$since_id = $null,\n    [int]$count = $null,\n  [int]$page = $null,\n    [bool]$raw = $false\n  );\n  if ( $since )\n  {\n    $args = \"?since=$since\";\n  }\n  if ( $since_id )\n  {\n    if ( $args ) { $args = \"${args}&\" } else { $args = \"?\" }\n    $args = \"${args}since_id=$since_id\";\n  }\n  if ( $count )\n  {\n    if ( $args ) { $args = \"${args}&\" } else { $args = \"?\" }\n    $args = \"${args}count=$count\";\n  }\n  if ( $page )\n  {\n    if ( $args ) { $args = \"${args}&\" } else { $args = \"?\" }\n    $args = \"${args}page=$page\";\n  }\n  \n  Write-Host \"Requesting URI: http://twitter.com/statuses/friends_timeline.xml${args}\";\n  $results = Execute-HTTPGetCommand \"http://twitter.com/statuses/friends_timeline.xml${args}\";\n  Process-TwitterStatus $results $raw\n}\n\n#----------------------------------------------------------------------------\n#user_timeline\n#----------------------------------------------------------------------------\nfunction Get-TwitterUserTimeline()\n{\n  param([string]$username = $null, [bool]$raw = $false);\n  if ( $username )\n  {\n    $username = \"/$username\";\n  }\n  $results = Execute-HTTPGetCommand \"http://twitter.com/statuses/user_timeline$username.xml\";\n  Process-TwitterStatus $results $raw\n}\n\n#----------------------------------------------------------------------------\n# show\n#----------------------------------------------------------------------------\nfunction Get-TwitterStatus()\n{\n  param([string]$id, [bool]$raw = $false);\n  if ( $id )\n  {\n    $results = Execute-HTTPGetCommand \"http://twitter.com/statuses/show/\" + $id + \".xml\";\n    Process-TwitterStatus $results $raw;\n  }\n}\n\n#----------------------------------------------------------------------------\n# update\n#----------------------------------------------------------------------------\nfunction Set-TwitterStatus()\n{\n  param([string]$status, [int]$in_reply_to_status_id = $null, [bool]$raw = $false);\n  $encstatus = [System.Web.HttpUtility]::UrlEncode(\"$status\");\n\n  $args = \"status=$encstatus\";\n  if ( $in_reply_to_status_id )\n  {\n    $args += \"&in_reply_to_status_id=${in_reply_to_status_id}\";\n  }\n  $results = Execute-HTTPPostCommand \"http://twitter.com/statuses/update.xml\" $args;\n  Process-TwitterStatus $results $raw;\n}\n\n#----------------------------------------------------------------------------\n# replies\n#----------------------------------------------------------------------------\nfunction Get-TwitterReplies()\n{\n  param([bool]$raw = $false);\n  $results = Execute-HTTPGetCommand \"http://twitter.com/statuses/replies.xml\";\n  Process-TwitterStatus $results $raw;\n}\n\n#----------------------------------------------------------------------------\n# destroy\n#----------------------------------------------------------------------------\nfunction Destroy-TwitterStatus()\n{\n  param([string]$id = $null);\n  if ( $id )\n  {\n    Execute-HTTPPostCommand \"http://twitter.com/statuses/destroy/$id.xml\", \"id=$id\";\n  }\n}\n\n#============================================================================\n# User Functions\n#============================================================================\n#----------------------------------------------------------------------------\n# Helper functions\n#----------------------------------------------------------------------------\nfunction Process-TwitterUsers()\n{\n  param([string]$sxml = $null, [bool]$raw = $false);\n  if ( $sxml )\n  {\n    if ( $raw )\n    {\n      $sxml;\n    }\n    else\n    {\n      [xml]$xml = $sxml;\n      if ( $xml.users.user )\n      {\n        $user = $xml.users.user;\n      }\n      elseif ($xml.user )\n      {\n        $user = $xml.user;\n      }\n      $user | Foreach-Object -process {\n        $id = $_.id;\n        $screen_name = $_.screen_name;\n        $name = $_.name;\n        $desc = $_.description;\n        $url = $_.url;\n        $followers_count = $_.followers_count;\n        $last_status = $_.status.text;\n        \n        \"-------------------------\";\n        \"$screen_name / $name (# $id , $followers_count followers) / $url\";\n        \"Bio: $desc\";\n        \"Tweet: $last_status\";\n      };\n      \"-------------------------\";\n    }\n  }\n}\n\n#----------------------------------------------------------------------------\n# friends\n#----------------------------------------------------------------------------\nfunction Get-TwitterFriends()\n{\n  param([string]$id_or_screenname, [string]$page = $null, [bool]$raw = $false);\n  if ( $id_or_screenname )\n  {\n    $id_or_screenname = \"/$id_or_screenname\";\n  }\n  if ( $page )\n  {\n    $page = \"?page=$page\";\n  }\n  Write-Host \"Requesting: http://twitter.com/statuses/friends$id_or_screenname.xml$page\";\n  $results = Execute-HTTPGetCommand \"http://twitter.com/statuses/friends$id_or_screenname.xml$page\";\n  Process-TwitterUsers $results $raw;\n}\n\n#----------------------------------------------------------------------------\n# followers\n#----------------------------------------------------------------------------\nfunction Get-TwitterFollowers()\n{\n  param([string]$id_or_screenname, [string]$page = $null, [bool]$raw = $false);\n  if ( $id_or_screenname )\n  {\n    $id_or_screenname = \"/$id_or_screenname\";\n  }\n  if ( $page )\n  {\n    $page = \"?page=$page\";\n  }\n  Write-Host \"Requesting: http://twitter.com/statuses/followers$id_or_screenname.xml$page\";\n  $results = Execute-HTTPGetCommand \"http://twitter.com/statuses/followers$id_or_screenname.xml$page\";\n  Process-TwitterUsers $results $raw;\n}\n\n#----------------------------------------------------------------------------\n# show\n#----------------------------------------------------------------------------\nfunction Get-TwitterUser()\n{\n  param([string]$id = $null, [string]$email = $null, [bool]$raw = $false);\n  $url = $null;\n  if ( $id )\n  {\n    $url = \"http://twitter.com/users/show/$id.xml\";\n  }\n  elseif ( $email )\n  {\n    $url = \"http://twitter.com/users/show.xml?email=$email\";\n  }\n  if ( $url )\n  {\n    $results = Execute-HTTPGetCommand $url;\n    PRocess-TwitterUsers $results $raw;\n  }\n}\n\n#============================================================================\n# Direct Message Functions\n#============================================================================\n#----------------------------------------------------------------------------\n# Helper functions\n#----------------------------------------------------------------------------\nfunction Process-TwitterDirectMessages()\n{\n  param([string]$sxml = $null, [bool]$raw = $false);\n  if ( $sxml )\n  {\n    if ( $raw )\n    {\n      $sxml;\n    }\n    else\n    {\n      [xml]$xml = $sxml;\n      if ( $xml.{direct-messages}.direct_message )\n      {\n        $dm = $xml.{direct-messages}.direct_message;\n      }\n      elseif ($xml.direct_message )\n      {\n        $dm = $xml.direct_message;\n      }\n      $dm | Foreach-Object -process {\n        $id = $_.id;\n        $text = $_.text;\n        $sender_screen_name = $_.sender_screen_name;\n        $name = $_.sender.name;\n        $created_at = $_.created_at;\n        \"-------------------------\";\n        \"(DM #$id) $text\";\n        \"by $sender_screen_name / $name on $created_at\";\n      };\n      \"-------------------------\";\n    }\n  }\n}\n\n#----------------------------------------------------------------------------\n# direct_messages\n#----------------------------------------------------------------------------\nfunction Get-TwitterDirectMessages()\n{\n  param([string]$since = $null, [string]$since_id = $null, [string]$page = $null, [bool]$raw = $false);\n  $args = $null;\n  if ( $since )\n  {\n    $args = \"?since=$since\";\n  }\n  elseif ( $since_id )\n  {\n    $args = \"?since_id=$since_id\";\n  }\n  elseif ( $page )\n  {\n    $args = \"?page=$page\";\n  }\n  $results = Execute-HTTPGetCommand \"http://twitter.com/direct_messages.xml$args\";\n  Process-TwitterDirectMessages $results $raw;\n}\n\n#----------------------------------------------------------------------------\n# sent\n#----------------------------------------------------------------------------\nfunction Get-TwitterSentDirectMessages()\n{\n  param([string]$since = $null, [string]$since_id = $null, [string]$page = $null, [bool]$raw = $false);\n  $args = $null;\n  if ( $since )\n  {\n    $args = \"?since=$since\";\n  }\n  elseif ( $since_id )\n  {\n    $args = \"?since_id=$since_id\";\n  }\n  elseif ( $page )\n  {\n    $args = \"?page=$page\";\n  }\n  $results = Execute-HTTPGetCommand \"http://twitter.com/direct_messages/sent.xml$args\";\n  Process-TwitterDirectMessages $results $raw;\n}\n\n#----------------------------------------------------------------------------\n# new\n#----------------------------------------------------------------------------\nfunction New-TwitterDirectMessage()\n{\n  param([string]$user = $null, [string]$text = $null, [bool]$raw = $false);\n  if ( $user -and $text )\n  {\n    $enctext = [System.Web.HttpUtility]::UrlEncode(\"$text\");\n    $results = Execute-HTTPPostCommand \"http://twitter.com/direct_messages/new.xml\" \"user=$user&text=$enctext\"\n    Process-TwitterDirectMessages $results $raw;\n  }\n}\n\n#----------------------------------------------------------------------------\n# destroy\n#----------------------------------------------------------------------------\nfunction Destroy-TwitterDirectMessage()\n{\n  param([string]$id = $null);\n  if ( $id )\n  {\n    $results = Execute-HTTPPostCommand \"http://twitter.com/direct_messages/destroy/$id.xml\" \"id=$id\";\n  }\n}\n\n#============================================================================\n# Friendship Functions\n#============================================================================\n#----------------------------------------------------------------------------\n# create\n#----------------------------------------------------------------------------\nfunction Create-TwitterFriendship()\n{\n  param([string]$id = $null, [bool]$follow = $true, [bool]$raw = $false);\n  if ( $id )\n  {\n  $follow = $follow.ToString().ToLower();\n    $results = Execute-HTTPPostCommand \"http://twitter.com/friendsips/create/${id}.xml\" \"id=${id}&follow=${follow}\"\n    Process-TwitterUsers $results $raw;\n  }\n}\n\n#----------------------------------------------------------------------------\n# destroy\n#----------------------------------------------------------------------------\nfunction Destroy-TwitterFriendship()\n{\n  param([string]$id = $null, [bool]$raw = $false);\n  if ( $id )\n  {\n    $results = Execute-HTTPPostCommand \"http://twitter.com/friendships/destroy/${id}.xml\" \"id=${id}\"\n    $results;\n    Process-TwitterUsers $results $raw;\n  }\n}\n\n#----------------------------------------------------------------------------\n# exists\n#----------------------------------------------------------------------------\nfunction Get-TwitterFriendshipExists\n{\n  param([string]$user_a = $null, [string]$user_b = $null);\n  if ( $user_a -and $user_b )\n  {\n    $results = Execute-HTTPGetCommand \"http://twitter.com/friendships/exists.xml?user_a=${user_a}&user_b=${user_b}\";\n  $results;\n  }\n}\n\n#============================================================================\n# Social Graph Functions\n#============================================================================\n#----------------------------------------------------------------------------\n# Helper Functions\n#----------------------------------------------------------------------------\nfunction Process-Ids()\n{\n  param([string]$sxml = $null, [bool]$raw = $false);\n  if ( $sxml )\n  {\n    if ( $raw )\n    {\n      $sxml;\n    }\n    else\n    {\n      [xml]$x = $sxml;\n      $i = 1;\n      $x.ids.id | ForEach-Object -Process {\n        $info = \"[$i] : \" + $_;\n        $info;\n        $i++;\n      }\n    }\n  }\n}\n\n#----------------------------------------------------------------------------\n# ids (friends)\n#----------------------------------------------------------------------------\nfunction Get-TwitterSocialGraphFriendIds()\n{\n  param([string]$id = $null, [bool]$raw = $false);\n  $args = \"\";\n  if ( $id )\n  {\n    $args = \"?id=${id}\";\n  }\n  $results = Execute-HTTPGetCommand \"http://twitter.com/friends/ids.xml$args\";\n  Process-Ids $results $raw;\n}\n\n\n#----------------------------------------------------------------------------\n# ids (followers)\n#----------------------------------------------------------------------------\nfunction Get-TwitterSocialGraphFollowerIds()\n{\n  param([string]$id = $null, [bool]$raw = $false);\n  $args = \"\";\n  if ( $id )\n  {\n    $args = \"?id=${id}\";\n  }\n  $results = Execute-HTTPGetCommand \"http://twitter.com/followers/ids.xml$args\";\n  Process-Ids $results $raw;\n}\n\n\n#============================================================================\n# Account Functions\n#============================================================================\n#----------------------------------------------------------------------------\n# helper functions\n#----------------------------------------------------------------------------\nfunction Is-ValidHexColor()\n{\n  param([string]$color_in_hex = $null)\n  [bool]$valid = $false;\n  if ( $color_in_hex )\n  {\n    [regex]$regex3 = \"[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]\";\n    [regex]$regex6 = \"[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]\";\n    if ( ($color_in_hex.Length -eq 3) -and ($color_in_hex -match $regex3) )\n    {\n      $valid = $true;\n    }\n    elseif ( ($color_in_hex.Length -eq 6) -and ($color_in_hex -match $regex6) )\n    {\n      $valid = $true;\n    }\n  }\n  $valid;\n}\n\n#----------------------------------------------------------------------------\n# verify_credentials\n#----------------------------------------------------------------------------\nfunction Verify-TwitterCredentials()\n{\n  $results = Execute-HTTPGetCommand \"http://twitter.com/account/verify_credentials.xml\";\n  $results;\n}\n\n#----------------------------------------------------------------------------\n# end_session\n#----------------------------------------------------------------------------\nfunction End-TwitterSession()\n{\n  $results = Execute-HTTPPostCommand \"http://twitter.com/account/end_session.xml\" \"\";\n  $results;\n}\n\n#----------------------------------------------------------------------------\n# update_delivery_device\n#----------------------------------------------------------------------------\nfunction Set-TwitterDeliveryDevice()\n{\n  param([string]$device = $null);\n  if ( $device )\n  {\n    if ( $device.Equals(\"sms\") -or $device.Equals(\"im\") -or $device.Equals(\"none\") )\n    {\n      $results = Execute-HTTPPostCommand \"http://twitter.com/account/update_delivery_device.xml?device=$device\" \"device=$device\";\n      $results;\n    }\n    else\n    {\n        Write-Error \"device must be either sms, im, or none!\"\n    }\n  }\n}\n\n#----------------------------------------------------------------------------\n# update_profile_colors\n#----------------------------------------------------------------------------\nfunction Set-TwitterProfileColors()\n{\n  param(\n    [string]$background_color = $null,\n    [string]$text_color = $null,\n    [string]$link_color = $null,\n    [string]$sidebar_fill_color = $null,\n    [string]$sidebar_border_color = $null);\n  $args = $null;\n  if ( $background_color )\n  {\n    if ( Is-ValidHexColor $background_color )\n    {\n      if ( $args ) { $args = \"$args&\"; }\n      $args = \"${args}profile_background_color=$background_color\";\n    }\n    else\n    {\n      Write-Error \"background_color '$background_color' must be a 3 or 6 valid hexadecimal value!\";\n    }\n  }\n  if ( $text_color )\n  {\n    if ( Is-ValidHexColor $text_color )\n    {\n      if ( $args ) { $args = \"$args&\"; }\n      $args = \"${args}profile_text_color=$text_color\";\n    }\n    else\n    {\n      Write-Error \"text_color '$text_color' must be a 3 or 6 valid hexadecimal value!\";\n    }\n  }\n  if ( $link_color )\n  {\n    if ( Is-ValidHexColor $link_color )\n    {\n      if ( $args ) { $args = \"$args&\"; }\n      $args = \"${args}profile_link_color=$link_color\";\n    }\n    else\n    {\n      Write-Error \"link_color '$link_color' must be a 3 or 6 valid hexadecimal value!\";\n    }\n  }\n  if ( $sidebar_fill_color )\n  {\n    if ( Is-ValidHexColor $sidebar_fill_color )\n    {\n      if ( $args ) { $args = \"$args&\"; }\n      $args = \"${args}profile_sidebar_fill_color=$sidebar_fill_color\";\n    }\n    else\n    {\n      Write-Error \"sidebar_fill_color '$sidebar_fill_color' must be a 3 or 6 valid hexadecimal value!\";\n    }\n  }\n  if ( $sidebar_border_color )\n  {\n    if ( Is-ValidHexColor $sidebar_border_color )\n    {\n      if ( $args ) { $args = \"$args&\"; }\n      $args = \"${args}profile_sidebar_border_color=$sidebar_border_color\";\n    }\n    else\n    {\n      Write-Error \"sidebar_border_color '$sidebar_border_color' must be a 3 or 6 valid hexadecimal value!\";\n    }\n  }\n  if ( $args )\n  {\n    Write-Host \"http://twitter.com/account/update_profile_colors.xml - $args\";\n    $results = Execute-HTTPPostCommand \"http://twitter.com/account/update_profile_colors.xml\" $args;\n    $results;\n  }\n}\n\n#----------------------------------------------------------------------------\n# update_profile_image\n#----------------------------------------------------------------------------\nfunction Set-TwitterProfileImage()\n{\n  param([string]$image = $null);\n  if ( $image )\n  {\n    $results = Execute-HTTPPostCommand \"http://twitter.com/account/update_profile_image.xml\" \"image=$image\";\n    $results;\n  }\n}\n\n#----------------------------------------------------------------------------\n# update_profile_background_image\n#----------------------------------------------------------------------------\nfunction Set-TwitterProfileBackgroundImage()\n{\n  param([string]$image = $null);\n  if ( $image )\n  {\n    $results = Execute-HTTPPostCommand \"http://twitter.com/account/update_profile_background_image.xml\" \"image=$image\";\n    $results;\n  }\n}\n\n#----------------------------------------------------------------------------\n# rate_limit_status\n#----------------------------------------------------------------------------\nfunction Get-TwitterRateLimitStatus()\n{\n  param([bool]$raw = $false);\n  $sXml = Execute-HTTPGetCommand \"http://twitter.com/account/rate_limit_status.xml\";\n  if ( $sXml )\n  {\n    if ( $raw )\n  {\n    $sXml;\n  }\n  else\n  {\n    [xml]$results = $sXml;\n      $remaining_hits = $results.hash.{remaining-hits}.get_InnerText();\n      $hourly_limit = $results.hash.{hourly-limit}.get_InnerText();\n      $reset_time_in_seconds = $results.hash.{reset-time-in-seconds}.get_InnerText();\n      $reset_time = $results.hash.{reset-time}.get_InnerText();\n      \"Remaining Hits: $remaining_hits\";\n      \"Hourly Limit  : $hourly_limit\";\n      \"Reset Time (s): $reset_time_in_seconds s.\";\n      \"Reset Time    : $reset_time\";\n    }\n  }\n}\n\n#----------------------------------------------------------------------------\n# update_profile\n#----------------------------------------------------------------------------\nfunction Set-TwitterProfile()\n{\n  param(\n    [string]$name = $null,\n    [string]$email = $null,\n    [string]$url = $null,\n    [string]$location = $null,\n    [string]$description = $null);\n  $args = $null;\n  if ( $name )\n  {\n    if ( $args ) { $args = \"$args&\"; }\n    $args = \"${args}name=$name\";\n  }\n  if ( $email )\n  {\n    if ( $args ) { $args = \"$args&\"; }\n    $args = \"${args}email=$email\";\n  }\n  if ( $url )\n  {\n    if ( $args ) { $args = \"$args&\"; }\n    $args = \"${args}url=$url\";\n  }\n  if ( $location )\n  {\n    if ( $args ) { $args = \"$args&\"; }\n    $args = \"${args}location=$location\";\n  }\n  if ( $description )\n  {\n    if ( $args ) { $args = \"$args&\"; }\n    $args = \"${args}description=$description\";\n  }\n  if ( $args )\n  {\n    $results = Execute-HTTPPostCommand \"http://twitter.com/account/update_profile.xml\" $args;\n    $results;\n  }\n}\n\n#============================================================================\n# Favorite Functions\n#============================================================================\n#----------------------------------------------------------------------------\n# favorites\n#----------------------------------------------------------------------------\nfunction Get-TwitterFavorites()\n{\n  param([string]$id, [string]$page = $null, [bool]$raw = $false);\n  if ( $id )\n  {\n    $id = \"/$id\";\n  }\n  if ( $page )\n  {\n    $page = \"?page=$page\";\n  }\n  $results = Execute-HTTPGetCommand \"http://twitter.com/favorites${id}.xml${page}\";\n  Process-TwitterStatus $results $raw;\n}\n\n#----------------------------------------------------------------------------\n# create\n#----------------------------------------------------------------------------\nfunction Create-TwitterFavorite()\n{\n  param([string]$id, [bool]$raw = $false);\n  if ( $id )\n  {\n    $id = \"/$id\";\n  }\n  $results = Execute-HTTPPostCommand \"http://twitter.com/favorites/create${id}.xml\" \"id=${id}\";\n  Process-TwitterStatus $results $raw;\n}\n\n#----------------------------------------------------------------------------\n# destroy\n#----------------------------------------------------------------------------\nfunction Destroy-TwitterFavorite()\n{\n  param([string]$id, [bool]$raw = $false);\n  if ( $id )\n  {\n    $id = \"/$id\";\n  }\n  $results = Execute-HTTPPostCommand \"http://twitter.com/favorites/destroy${id}.xml\" \"id=${id}\";\n  Process-TwitterStatus $results $raw;\n}\n\n\n#============================================================================\n# Notification Functions\n#============================================================================\n#----------------------------------------------------------------------------\n# follow\n#----------------------------------------------------------------------------\nfunction Follow-TwitterUser()\n{\n  param([string]$id, [bool]$raw = $false);\n  if ( $id )\n  {\n    $results = Execute-HTTPPostCommand \"http://twitter.com/notifications/follow/${id}.xml\" \"id=${id}\";\n    Process-TwitterUsers $results $raw;\n  }\n}\n\n#----------------------------------------------------------------------------\n# leave\n#----------------------------------------------------------------------------\nfunction Leave-TwitterUser()\n{\n  param([string]$id, [bool]$raw = $false);\n  if ( $id )\n  {\n    $results = Execute-HTTPPostCommand \"http://twitter.com/notifications/leave/${id}.xml\" \"id=${id}\";\n    Process-TwitterUsers $results $raw;\n  }\n}\n\n#============================================================================\n# Block Functions\n#============================================================================\n#----------------------------------------------------------------------------\n# create\n#----------------------------------------------------------------------------\nfunction Create-TwitterBlock()\n{\n  param([string]$id, [bool]$raw = $false);\n  if ( $id )\n  {\n    $results = Execute-HTTPPostCommand \"http://twitter.com/blocks/create/${id}.xml\" \"id=${id}\";\n    Process-TwitterUsers $results $raw;\n  }\n}\n\n#----------------------------------------------------------------------------\n# destroy\n#----------------------------------------------------------------------------\nfunction Destroy-TwitterBlock()\n{\n  param([string]$id, [bool]$raw = $false);\n  if ( $id )\n  {\n    $results = Execute-HTTPPostCommand \"http://twitter.com/blocks/destroy/${id}.xml\" \"id=${id}\";\n    Process-TwitterUsers $results $raw;\n  }\n}\n\n\n#============================================================================\n# Help Functions\n#============================================================================\n#----------------------------------------------------------------------------\n# test\n#----------------------------------------------------------------------------\nfunction Get-TwitterHelpTest()\n{\n  $results = Execute-HTTPGetCommand \"http://twitter.com/help/test.xml\";\n  $results;\n}\n\n#----------------------------------------------------------------------------\n# downtime_schedule\n#----------------------------------------------------------------------------\nfunction Get-TwitterDowntimeSchedule()\n{\n  $results = Execute-HTTPGetCommand \"http://twitter.com/help/downtime_schedule.xml\";\n  $results;\n}\n\n#============================================================================\n# TwitterCounter\n#============================================================================\n#----------------------------------------------------------------------------\n# Get-TwitterCounterStats\n#----------------------------------------------------------------------------\nfunction Get-TwitterCounterStats()\n{\n  param([string]$username = $null, [int]$results = 14, [bool]$raw = $false);\n  $output = \"xml\";\n  $stats = $null;\n  if ( $username )\n  {\n    $stats = Execute-HTTPGetCommand \"http://twittercounter.com/api/?username=$username&output=$output&results=$results\"\n  }\n  if ( !$raw )\n  {\n    $stats = [xml]$stats;\n    $stats.twittercounter\n  }\n  else\n  {\n    $stats;\n  }\n}\n\n#============================================================================\n# Utilities\n#============================================================================\nfunction Get-GroupMemberList()\n{\n  param([string]$url = $null, [string]$tagstart = $null);\n  if ( $tagstart -eq $null ) { $tagstart = \"entrybody\"; }\n  \n  # Posh Twitter Users \"http://www.mindofroot.com/powershell-twitterers/\";  \n  if ( $url )\n  {\n    $site = Execute-HTTPGetRequest $url;\n    \n    $previous = @()\n    $start = $site.IndexOf('
')\n $site = $site.substring($start)\n $start = $site.IndexOf('') + 5\n \n [xml]$doc = $site.substring(0,$end) \n $results = $doc.ul.li | select @{name='Name';Expression={$_.a.'#text'}}, @{name='TwitterURL';Expression={$_.a.href}}, @{name='UserName';Expression={$_.a.href -replace 'http://twitter.com/'}}\n $results = $results[1..($results.count-1)]\n return $results\n }\n}
","kudosSumWeight":0,"postTime":"2015-03-09T12:16:57.000-07:00","images":{"__typename":"AssociatedImageConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"attachments":{"__typename":"AttachmentConnection","pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null},"edges":[]},"tags":{"__typename":"TagConnection","pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null},"edges":[{"__typename":"TagEdge","cursor":"MjUuM3wyLjF8b3wxMHxfTlZffDE","node":{"__typename":"Tag","id":"tag:devops","text":"devops","time":"2011-10-19T17:50:55.000-07:00","lastActivityTime":null,"messagesCount":null,"followersCount":null}},{"__typename":"TagEdge","cursor":"MjUuM3wyLjF8b3wxMHxfTlZffDI","node":{"__typename":"Tag","id":"tag:iControl","text":"iControl","time":"2022-01-24T02:29:45.068-08:00","lastActivityTime":null,"messagesCount":null,"followersCount":null}},{"__typename":"TagEdge","cursor":"MjUuM3wyLjF8b3wxMHxfTlZffDM","node":{"__typename":"Tag","id":"tag:microsoft powershell with icontrol","text":"microsoft powershell with icontrol","time":"2022-01-24T02:29:45.066-08:00","lastActivityTime":null,"messagesCount":null,"followersCount":null}}]},"timeToRead":12,"rawTeaser":"","introduction":"","currentRevision":{"__ref":"Revision:revision:278318_1"},"latestVersion":{"__typename":"FriendlyVersion","major":"1","minor":"0"},"metrics":{"__typename":"MessageMetrics","views":409},"visibilityScope":"PUBLIC","canonicalUrl":null,"seoTitle":null,"seoDescription":null,"placeholder":false,"originalMessageForPlaceholder":null,"contributors":{"__typename":"UserConnection","edges":[]},"nonCoAuthorContributors":{"__typename":"UserConnection","edges":[]},"coAuthors":{"__typename":"UserConnection","edges":[{"__typename":"UserEdge","node":{"__ref":"User:user:131293"}}]},"tkbMessagePolicies":{"__typename":"TkbMessagePolicies","canDoAuthoringActionsOnTkb":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.tkb.policy_can_do_authoring_action.accessDenied","key":"error.lithium.policies.tkb.policy_can_do_authoring_action.accessDenied","args":[]}}},"archivalData":null,"replies":{"__typename":"MessageConnection","edges":[],"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"customFields":[],"revisions({\"constraints\":{\"isPublished\":{\"eq\":true}},\"first\":1})":{"__typename":"RevisionConnection","totalCount":1}},"Conversation:conversation:278318":{"__typename":"Conversation","id":"conversation:278318","solved":false,"topic":{"__ref":"TkbTopicMessage:message:278318"},"lastPostingActivityTime":"2015-03-09T12:16:57.000-07:00","lastPostTime":"2015-03-09T12:16:57.000-07:00","unreadReplyCount":0,"isSubscribed":false},"ModerationData:moderation_data:278318":{"__typename":"ModerationData","id":"moderation_data:278318","status":"APPROVED","rejectReason":null,"isReportedAbuse":false,"rejectUser":null,"rejectTime":null,"rejectActorType":null},"Revision:revision:278318_1":{"__typename":"Revision","id":"revision:278318_1","lastEditTime":"2015-03-09T12:16:57.000-07:00"},"CachedAsset:theme:customTheme1-1745595709910":{"__typename":"CachedAsset","id":"theme:customTheme1-1745595709910","value":{"id":"customTheme1","animation":{"fast":"150ms","normal":"250ms","slow":"500ms","slowest":"750ms","function":"cubic-bezier(0.07, 0.91, 0.51, 1)","__typename":"AnimationThemeSettings"},"avatar":{"borderRadius":"50%","collections":["custom"],"__typename":"AvatarThemeSettings"},"basics":{"browserIcon":{"imageAssetName":"JimmyPackets-512-1702592938213.png","imageLastModified":"1702592945815","__typename":"ThemeAsset"},"customerLogo":{"imageAssetName":"f5_logo_fix-1704824537976.svg","imageLastModified":"1704824540697","__typename":"ThemeAsset"},"maximumWidthOfPageContent":"1600px","oneColumnNarrowWidth":"800px","gridGutterWidthMd":"30px","gridGutterWidthXs":"10px","pageWidthStyle":"WIDTH_OF_PAGE_CONTENT","__typename":"BasicsThemeSettings"},"buttons":{"borderRadiusSm":"5px","borderRadius":"5px","borderRadiusLg":"5px","paddingY":"5px","paddingYLg":"7px","paddingYHero":"var(--lia-bs-btn-padding-y-lg)","paddingX":"12px","paddingXLg":"14px","paddingXHero":"42px","fontStyle":"NORMAL","fontWeight":"400","textTransform":"NONE","disabledOpacity":0.5,"primaryTextColor":"var(--lia-bs-white)","primaryTextHoverColor":"var(--lia-bs-white)","primaryTextActiveColor":"var(--lia-bs-white)","primaryBgColor":"var(--lia-bs-primary)","primaryBgHoverColor":"hsl(var(--lia-bs-primary-h), var(--lia-bs-primary-s), calc(var(--lia-bs-primary-l) * 0.85))","primaryBgActiveColor":"hsl(var(--lia-bs-primary-h), var(--lia-bs-primary-s), calc(var(--lia-bs-primary-l) * 0.7))","primaryBorder":"1px solid transparent","primaryBorderHover":"1px solid transparent","primaryBorderActive":"1px solid transparent","primaryBorderFocus":"1px solid var(--lia-bs-white)","primaryBoxShadowFocus":"0 0 0 1px var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","secondaryTextColor":"var(--lia-bs-gray-900)","secondaryTextHoverColor":"hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.95))","secondaryTextActiveColor":"hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.9))","secondaryBgColor":"var(--lia-bs-gray-400)","secondaryBgHoverColor":"hsl(var(--lia-bs-gray-400-h), var(--lia-bs-gray-400-s), calc(var(--lia-bs-gray-400-l) * 0.96))","secondaryBgActiveColor":"hsl(var(--lia-bs-gray-400-h), var(--lia-bs-gray-400-s), calc(var(--lia-bs-gray-400-l) * 0.92))","secondaryBorder":"1px solid transparent","secondaryBorderHover":"1px solid transparent","secondaryBorderActive":"1px solid transparent","secondaryBorderFocus":"1px solid transparent","secondaryBoxShadowFocus":"0 0 0 1px var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","tertiaryTextColor":"var(--lia-bs-gray-900)","tertiaryTextHoverColor":"hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.95))","tertiaryTextActiveColor":"hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.9))","tertiaryBgColor":"transparent","tertiaryBgHoverColor":"transparent","tertiaryBgActiveColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.04)","tertiaryBorder":"1px solid transparent","tertiaryBorderHover":"1px solid hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.08)","tertiaryBorderActive":"1px solid transparent","tertiaryBorderFocus":"1px solid transparent","tertiaryBoxShadowFocus":"0 0 0 1px var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","destructiveTextColor":"var(--lia-bs-danger)","destructiveTextHoverColor":"hsl(var(--lia-bs-danger-h), var(--lia-bs-danger-s), calc(var(--lia-bs-danger-l) * 0.95))","destructiveTextActiveColor":"hsl(var(--lia-bs-danger-h), var(--lia-bs-danger-s), calc(var(--lia-bs-danger-l) * 0.9))","destructiveBgColor":"var(--lia-bs-gray-300)","destructiveBgHoverColor":"hsl(var(--lia-bs-gray-300-h), var(--lia-bs-gray-300-s), calc(var(--lia-bs-gray-300-l) * 0.96))","destructiveBgActiveColor":"hsl(var(--lia-bs-gray-300-h), var(--lia-bs-gray-300-s), calc(var(--lia-bs-gray-300-l) * 0.92))","destructiveBorder":"1px solid transparent","destructiveBorderHover":"1px solid transparent","destructiveBorderActive":"1px solid transparent","destructiveBorderFocus":"1px solid transparent","destructiveBoxShadowFocus":"0 0 0 1px var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","__typename":"ButtonsThemeSettings"},"border":{"color":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.08)","mainContent":"NONE","sideContent":"NONE","radiusSm":"3px","radius":"5px","radiusLg":"9px","radius50":"100vw","__typename":"BorderThemeSettings"},"boxShadow":{"xs":"0 0 0 1px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.08), 0 3px 0 -1px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.08)","sm":"0 2px 4px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.06)","md":"0 5px 15px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.15)","lg":"0 10px 30px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.15)","__typename":"BoxShadowThemeSettings"},"cards":{"bgColor":"var(--lia-panel-bg-color)","borderRadius":"var(--lia-panel-border-radius)","boxShadow":"var(--lia-box-shadow-xs)","__typename":"CardsThemeSettings"},"chip":{"maxWidth":"300px","height":"30px","__typename":"ChipThemeSettings"},"coreTypes":{"defaultMessageLinkColor":"var(--lia-bs-primary)","defaultMessageLinkDecoration":"none","defaultMessageLinkFontStyle":"NORMAL","defaultMessageLinkFontWeight":"400","defaultMessageFontStyle":"NORMAL","defaultMessageFontWeight":"400","defaultMessageFontFamily":"var(--lia-bs-font-family-base)","forumColor":"#0C5C8D","forumFontFamily":"var(--lia-bs-font-family-base)","forumFontWeight":"var(--lia-default-message-font-weight)","forumLineHeight":"var(--lia-bs-line-height-base)","forumFontStyle":"var(--lia-default-message-font-style)","forumMessageLinkColor":"var(--lia-default-message-link-color)","forumMessageLinkDecoration":"var(--lia-default-message-link-decoration)","forumMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","forumMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","forumSolvedColor":"#62C026","blogColor":"#730015","blogFontFamily":"var(--lia-bs-font-family-base)","blogFontWeight":"var(--lia-default-message-font-weight)","blogLineHeight":"1.75","blogFontStyle":"var(--lia-default-message-font-style)","blogMessageLinkColor":"var(--lia-default-message-link-color)","blogMessageLinkDecoration":"var(--lia-default-message-link-decoration)","blogMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","blogMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","tkbColor":"#C20025","tkbFontFamily":"var(--lia-bs-font-family-base)","tkbFontWeight":"var(--lia-default-message-font-weight)","tkbLineHeight":"1.75","tkbFontStyle":"var(--lia-default-message-font-style)","tkbMessageLinkColor":"var(--lia-default-message-link-color)","tkbMessageLinkDecoration":"var(--lia-default-message-link-decoration)","tkbMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","tkbMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","qandaColor":"#4099E2","qandaFontFamily":"var(--lia-bs-font-family-base)","qandaFontWeight":"var(--lia-default-message-font-weight)","qandaLineHeight":"var(--lia-bs-line-height-base)","qandaFontStyle":"var(--lia-default-message-link-font-style)","qandaMessageLinkColor":"var(--lia-default-message-link-color)","qandaMessageLinkDecoration":"var(--lia-default-message-link-decoration)","qandaMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","qandaMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","qandaSolvedColor":"#3FA023","ideaColor":"#F3704B","ideaFontFamily":"var(--lia-bs-font-family-base)","ideaFontWeight":"var(--lia-default-message-font-weight)","ideaLineHeight":"var(--lia-bs-line-height-base)","ideaFontStyle":"var(--lia-default-message-font-style)","ideaMessageLinkColor":"var(--lia-default-message-link-color)","ideaMessageLinkDecoration":"var(--lia-default-message-link-decoration)","ideaMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","ideaMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","contestColor":"#FCC845","contestFontFamily":"var(--lia-bs-font-family-base)","contestFontWeight":"var(--lia-default-message-font-weight)","contestLineHeight":"var(--lia-bs-line-height-base)","contestFontStyle":"var(--lia-default-message-link-font-style)","contestMessageLinkColor":"var(--lia-default-message-link-color)","contestMessageLinkDecoration":"var(--lia-default-message-link-decoration)","contestMessageLinkFontStyle":"ITALIC","contestMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","occasionColor":"#EE4B5B","occasionFontFamily":"var(--lia-bs-font-family-base)","occasionFontWeight":"var(--lia-default-message-font-weight)","occasionLineHeight":"var(--lia-bs-line-height-base)","occasionFontStyle":"var(--lia-default-message-font-style)","occasionMessageLinkColor":"var(--lia-default-message-link-color)","occasionMessageLinkDecoration":"var(--lia-default-message-link-decoration)","occasionMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","occasionMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","grouphubColor":"#491B62","categoryColor":"#949494","communityColor":"#FFFFFF","productColor":"#949494","__typename":"CoreTypesThemeSettings"},"colors":{"black":"#000000","white":"#FFFFFF","gray100":"#F7F7F7","gray200":"#F7F7F7","gray300":"#E8E8E8","gray400":"#D9D9D9","gray500":"#CCCCCC","gray600":"#949494","gray700":"#707070","gray800":"#545454","gray900":"#333333","dark":"#545454","light":"#F7F7F7","primary":"#0C5C8D","secondary":"#333333","bodyText":"#222222","bodyBg":"#F5F5F5","info":"#1D9CD3","success":"#62C026","warning":"#FFD651","danger":"#C20025","alertSystem":"#FF6600","textMuted":"#707070","highlight":"#FFFCAD","outline":"var(--lia-bs-primary)","custom":["#C20025","#081B85","#009639","#B3C6D7","#7CC0EB","#F29A36"],"__typename":"ColorsThemeSettings"},"divider":{"size":"3px","marginLeft":"4px","marginRight":"4px","borderRadius":"50%","bgColor":"var(--lia-bs-gray-600)","bgColorActive":"var(--lia-bs-gray-600)","__typename":"DividerThemeSettings"},"dropdown":{"fontSize":"var(--lia-bs-font-size-sm)","borderColor":"var(--lia-bs-border-color)","borderRadius":"var(--lia-bs-border-radius-sm)","dividerBg":"var(--lia-bs-gray-300)","itemPaddingY":"5px","itemPaddingX":"20px","headerColor":"var(--lia-bs-gray-700)","__typename":"DropdownThemeSettings"},"email":{"link":{"color":"#0069D4","hoverColor":"#0061c2","decoration":"none","hoverDecoration":"underline","__typename":"EmailLinkSettings"},"border":{"color":"#e4e4e4","__typename":"EmailBorderSettings"},"buttons":{"borderRadiusLg":"5px","paddingXLg":"16px","paddingYLg":"7px","fontWeight":"700","primaryTextColor":"#ffffff","primaryTextHoverColor":"#ffffff","primaryBgColor":"#0069D4","primaryBgHoverColor":"#005cb8","primaryBorder":"1px solid transparent","primaryBorderHover":"1px solid transparent","__typename":"EmailButtonsSettings"},"panel":{"borderRadius":"5px","borderColor":"#e4e4e4","__typename":"EmailPanelSettings"},"__typename":"EmailThemeSettings"},"emoji":{"skinToneDefault":"#ffcd43","skinToneLight":"#fae3c5","skinToneMediumLight":"#e2cfa5","skinToneMedium":"#daa478","skinToneMediumDark":"#a78058","skinToneDark":"#5e4d43","__typename":"EmojiThemeSettings"},"heading":{"color":"var(--lia-bs-body-color)","fontFamily":"Inter","fontStyle":"NORMAL","fontWeight":"600","h1FontSize":"30px","h2FontSize":"25px","h3FontSize":"20px","h4FontSize":"18px","h5FontSize":"16px","h6FontSize":"16px","lineHeight":"1.2","subHeaderFontSize":"11px","subHeaderFontWeight":"500","h1LetterSpacing":"normal","h2LetterSpacing":"normal","h3LetterSpacing":"normal","h4LetterSpacing":"normal","h5LetterSpacing":"normal","h6LetterSpacing":"normal","subHeaderLetterSpacing":"2px","h1FontWeight":"var(--lia-bs-headings-font-weight)","h2FontWeight":"var(--lia-bs-headings-font-weight)","h3FontWeight":"var(--lia-bs-headings-font-weight)","h4FontWeight":"var(--lia-bs-headings-font-weight)","h5FontWeight":"var(--lia-bs-headings-font-weight)","h6FontWeight":"var(--lia-bs-headings-font-weight)","__typename":"HeadingThemeSettings"},"icons":{"size10":"10px","size12":"12px","size14":"14px","size16":"16px","size20":"20px","size24":"24px","size30":"30px","size40":"40px","size50":"50px","size60":"60px","size80":"80px","size120":"120px","size160":"160px","__typename":"IconsThemeSettings"},"imagePreview":{"bgColor":"var(--lia-bs-gray-900)","titleColor":"var(--lia-bs-white)","controlColor":"var(--lia-bs-white)","controlBgColor":"var(--lia-bs-gray-800)","__typename":"ImagePreviewThemeSettings"},"input":{"borderColor":"var(--lia-bs-gray-600)","disabledColor":"var(--lia-bs-gray-600)","focusBorderColor":"var(--lia-bs-primary)","labelMarginBottom":"10px","btnFontSize":"var(--lia-bs-font-size-sm)","focusBoxShadow":"0 0 0 3px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","checkLabelMarginBottom":"2px","checkboxBorderRadius":"3px","borderRadiusSm":"var(--lia-bs-border-radius-sm)","borderRadius":"var(--lia-bs-border-radius)","borderRadiusLg":"var(--lia-bs-border-radius-lg)","formTextMarginTop":"4px","textAreaBorderRadius":"var(--lia-bs-border-radius)","activeFillColor":"var(--lia-bs-primary)","__typename":"InputThemeSettings"},"loading":{"dotDarkColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.2)","dotLightColor":"hsla(var(--lia-bs-white-h), var(--lia-bs-white-s), var(--lia-bs-white-l), 0.5)","barDarkColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.06)","barLightColor":"hsla(var(--lia-bs-white-h), var(--lia-bs-white-s), var(--lia-bs-white-l), 0.4)","__typename":"LoadingThemeSettings"},"link":{"color":"var(--lia-bs-primary)","hoverColor":"hsl(var(--lia-bs-primary-h), var(--lia-bs-primary-s), calc(var(--lia-bs-primary-l) - 10%))","decoration":"none","hoverDecoration":"underline","__typename":"LinkThemeSettings"},"listGroup":{"itemPaddingY":"15px","itemPaddingX":"15px","borderColor":"var(--lia-bs-gray-300)","__typename":"ListGroupThemeSettings"},"modal":{"contentTextColor":"var(--lia-bs-body-color)","contentBg":"var(--lia-bs-white)","backgroundBg":"var(--lia-bs-black)","smSize":"440px","mdSize":"760px","lgSize":"1080px","backdropOpacity":0.3,"contentBoxShadowXs":"var(--lia-bs-box-shadow-sm)","contentBoxShadow":"var(--lia-bs-box-shadow)","headerFontWeight":"700","__typename":"ModalThemeSettings"},"navbar":{"position":"FIXED","background":{"attachment":null,"clip":null,"color":"var(--lia-bs-white)","imageAssetName":null,"imageLastModified":"0","origin":null,"position":"CENTER_CENTER","repeat":"NO_REPEAT","size":"COVER","__typename":"BackgroundProps"},"backgroundOpacity":0.8,"paddingTop":"15px","paddingBottom":"15px","borderBottom":"1px solid var(--lia-bs-border-color)","boxShadow":"var(--lia-bs-box-shadow-sm)","brandMarginRight":"30px","brandMarginRightSm":"10px","brandLogoHeight":"30px","linkGap":"10px","linkJustifyContent":"flex-start","linkPaddingY":"5px","linkPaddingX":"10px","linkDropdownPaddingY":"9px","linkDropdownPaddingX":"var(--lia-nav-link-px)","linkColor":"var(--lia-bs-body-color)","linkHoverColor":"var(--lia-bs-primary)","linkFontSize":"var(--lia-bs-font-size-sm)","linkFontStyle":"NORMAL","linkFontWeight":"400","linkTextTransform":"NONE","linkLetterSpacing":"normal","linkBorderRadius":"var(--lia-bs-border-radius-sm)","linkBgColor":"transparent","linkBgHoverColor":"transparent","linkBorder":"none","linkBorderHover":"none","linkBoxShadow":"none","linkBoxShadowHover":"none","linkTextBorderBottom":"none","linkTextBorderBottomHover":"none","dropdownPaddingTop":"10px","dropdownPaddingBottom":"15px","dropdownPaddingX":"10px","dropdownMenuOffset":"2px","dropdownDividerMarginTop":"10px","dropdownDividerMarginBottom":"10px","dropdownBorderColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.08)","controllerBgHoverColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.1)","controllerIconColor":"var(--lia-bs-body-color)","controllerIconHoverColor":"var(--lia-bs-body-color)","controllerTextColor":"var(--lia-nav-controller-icon-color)","controllerTextHoverColor":"var(--lia-nav-controller-icon-hover-color)","controllerHighlightColor":"hsla(30, 100%, 50%)","controllerHighlightTextColor":"var(--lia-yiq-light)","controllerBorderRadius":"var(--lia-border-radius-50)","hamburgerColor":"var(--lia-nav-controller-icon-color)","hamburgerHoverColor":"var(--lia-nav-controller-icon-color)","hamburgerBgColor":"transparent","hamburgerBgHoverColor":"transparent","hamburgerBorder":"none","hamburgerBorderHover":"none","collapseMenuMarginLeft":"20px","collapseMenuDividerBg":"var(--lia-nav-link-color)","collapseMenuDividerOpacity":0.16,"__typename":"NavbarThemeSettings"},"pager":{"textColor":"var(--lia-bs-link-color)","textFontWeight":"var(--lia-font-weight-md)","textFontSize":"var(--lia-bs-font-size-sm)","__typename":"PagerThemeSettings"},"panel":{"bgColor":"var(--lia-bs-white)","borderRadius":"var(--lia-bs-border-radius)","borderColor":"var(--lia-bs-border-color)","boxShadow":"none","__typename":"PanelThemeSettings"},"popover":{"arrowHeight":"8px","arrowWidth":"16px","maxWidth":"300px","minWidth":"100px","headerBg":"var(--lia-bs-white)","borderColor":"var(--lia-bs-border-color)","borderRadius":"var(--lia-bs-border-radius)","boxShadow":"0 0.5rem 1rem hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.15)","__typename":"PopoverThemeSettings"},"prism":{"color":"#000000","bgColor":"#f5f2f0","fontFamily":"var(--font-family-monospace)","fontSize":"var(--lia-bs-font-size-base)","fontWeightBold":"var(--lia-bs-font-weight-bold)","fontStyleItalic":"italic","tabSize":2,"highlightColor":"#b3d4fc","commentColor":"#62707e","punctuationColor":"#6f6f6f","namespaceOpacity":"0.7","propColor":"#990055","selectorColor":"#517a00","operatorColor":"#906736","operatorBgColor":"hsla(0, 0%, 100%, 0.5)","keywordColor":"#0076a9","functionColor":"#d3284b","variableColor":"#c14700","__typename":"PrismThemeSettings"},"rte":{"bgColor":"var(--lia-bs-white)","borderRadius":"var(--lia-panel-border-radius)","boxShadow":" var(--lia-panel-box-shadow)","customColor1":"#bfedd2","customColor2":"#fbeeb8","customColor3":"#f8cac6","customColor4":"#eccafa","customColor5":"#c2e0f4","customColor6":"#2dc26b","customColor7":"#f1c40f","customColor8":"#e03e2d","customColor9":"#b96ad9","customColor10":"#3598db","customColor11":"#169179","customColor12":"#e67e23","customColor13":"#ba372a","customColor14":"#843fa1","customColor15":"#236fa1","customColor16":"#ecf0f1","customColor17":"#ced4d9","customColor18":"#95a5a6","customColor19":"#7e8c8d","customColor20":"#34495e","customColor21":"#000000","customColor22":"#ffffff","defaultMessageHeaderMarginTop":"14px","defaultMessageHeaderMarginBottom":"10px","defaultMessageItemMarginTop":"0","defaultMessageItemMarginBottom":"10px","diffAddedColor":"hsla(170, 53%, 51%, 0.4)","diffChangedColor":"hsla(43, 97%, 63%, 0.4)","diffNoneColor":"hsla(0, 0%, 80%, 0.4)","diffRemovedColor":"hsla(9, 74%, 47%, 0.4)","specialMessageHeaderMarginTop":"14px","specialMessageHeaderMarginBottom":"10px","specialMessageItemMarginTop":"0","specialMessageItemMarginBottom":"10px","__typename":"RteThemeSettings"},"tags":{"bgColor":"var(--lia-bs-gray-200)","bgHoverColor":"var(--lia-bs-gray-400)","borderRadius":"var(--lia-bs-border-radius-sm)","color":"var(--lia-bs-body-color)","hoverColor":"var(--lia-bs-body-color)","fontWeight":"var(--lia-font-weight-md)","fontSize":"var(--lia-font-size-xxs)","textTransform":"UPPERCASE","letterSpacing":"0.5px","__typename":"TagsThemeSettings"},"toasts":{"borderRadius":"var(--lia-bs-border-radius)","paddingX":"12px","__typename":"ToastsThemeSettings"},"typography":{"fontFamilyBase":"Atkinson Hyperlegible","fontStyleBase":"NORMAL","fontWeightBase":"400","fontWeightLight":"300","fontWeightNormal":"400","fontWeightMd":"500","fontWeightBold":"700","letterSpacingSm":"normal","letterSpacingXs":"normal","lineHeightBase":"1.3","fontSizeBase":"15px","fontSizeXxs":"11px","fontSizeXs":"12px","fontSizeSm":"13px","fontSizeLg":"20px","fontSizeXl":"24px","smallFontSize":"14px","customFonts":[],"__typename":"TypographyThemeSettings"},"unstyledListItem":{"marginBottomSm":"5px","marginBottomMd":"10px","marginBottomLg":"15px","marginBottomXl":"20px","marginBottomXxl":"25px","__typename":"UnstyledListItemThemeSettings"},"yiq":{"light":"#ffffff","dark":"#000000","__typename":"YiqThemeSettings"},"colorLightness":{"primaryDark":0.36,"primaryLight":0.74,"primaryLighter":0.89,"primaryLightest":0.95,"infoDark":0.39,"infoLight":0.72,"infoLighter":0.85,"infoLightest":0.93,"successDark":0.24,"successLight":0.62,"successLighter":0.8,"successLightest":0.91,"warningDark":0.39,"warningLight":0.68,"warningLighter":0.84,"warningLightest":0.93,"dangerDark":0.41,"dangerLight":0.72,"dangerLighter":0.89,"dangerLightest":0.95,"__typename":"ColorLightnessThemeSettings"},"localOverride":false,"__typename":"Theme"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/common/Loading/LoadingDot-1745595729125":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/Loading/LoadingDot-1745595729125","value":{"title":"Loading..."},"localOverride":false},"CachedAsset:quilt:f5.prod:pages/kbs/TkbMessagePage:board:codeshare-1745954207822":{"__typename":"CachedAsset","id":"quilt:f5.prod:pages/kbs/TkbMessagePage:board:codeshare-1745954207822","value":{"id":"TkbMessagePage","container":{"id":"Common","headerProps":{"backgroundImageProps":null,"backgroundColor":null,"addComponents":null,"removeComponents":["community.widget.bannerWidget"],"componentOrder":null,"__typename":"QuiltContainerSectionProps"},"headerComponentProps":{"community.widget.breadcrumbWidget":{"disableLastCrumbForDesktop":false}},"footerProps":null,"footerComponentProps":null,"items":[{"id":"message-list","layout":"MAIN_SIDE","bgColor":"transparent","showTitle":true,"showDescription":true,"textPosition":"CENTER","textColor":"var(--lia-bs-body-color)","sectionEditLevel":null,"bgImage":null,"disableSpacing":null,"edgeToEdgeDisplay":null,"fullHeight":null,"showBorder":null,"__typename":"MainSideQuiltSection","columnMap":{"main":[{"id":"tkbs.widget.tkbArticleWidget","className":"lia-tkb-container","props":{"contributorListType":"panel","showHelpfulness":false,"showTimestamp":true,"showGuideNavigationSection":true,"showVersion":true,"lazyLoad":false,"editLevel":"CONFIGURE"},"__typename":"QuiltComponent"}],"side":[{"id":"featuredWidgets.widget.featuredContentWidget","className":null,"props":{"instanceId":"featuredWidgets.widget.featuredContentWidget-1702666556326","layoutProps":{"layout":"card","layoutOptions":{"useRepliesCount":false,"useAuthorRank":false,"useTimeToRead":true,"useKudosCount":false,"useViewCount":true,"usePreviewMedia":true,"useBody":false,"useCenteredCardContent":false,"useTags":true,"useTimestamp":false,"useBoardLink":true,"useAuthorLink":false,"useSolvedBadge":true}},"titleSrOnly":false,"showPager":true,"pageSize":3,"lazyLoad":true},"__typename":"QuiltComponent"},{"id":"messages.widget.relatedContentWidget","className":null,"props":{"hideIfEmpty":true,"enablePagination":true,"useTitle":true,"listVariant":{"type":"listGroup"},"pageSize":3,"style":"list","pagerVariant":{"type":"loadMore"},"viewVariant":{"type":"inline","props":{"useRepliesCount":true,"useMedia":true,"useAuthorRank":false,"useNode":true,"useTimeToRead":true,"useSpoilerFreeBody":true,"useKudosCount":true,"useNodeLink":true,"useViewCount":true,"usePreviewMedia":false,"useBody":false,"timeStampType":"postTime","useTags":true,"clampSubjectLines":2,"useBoardIcon":false,"useMessageTimeLink":true,"clampBodyLines":3,"useTextBody":true,"useSolvedBadge":true,"useAvatar":true,"useAuthorLogin":true,"useUnreadCount":true}},"lazyLoad":true,"panelType":"divider"},"__typename":"QuiltComponent"}],"__typename":"MainSideSectionColumns"}}],"__typename":"QuiltContainer"},"__typename":"Quilt","localOverride":false},"localOverride":false},"CachedAsset:text:en_US-components/common/EmailVerification-1745595729125":{"__typename":"CachedAsset","id":"text:en_US-components/common/EmailVerification-1745595729125","value":{"email.verification.title":"Email Verification Required","email.verification.message.update.email":"To participate in the community, you must first verify your email address. The verification email was sent to {email}. To change your email, visit My Settings.","email.verification.message.resend.email":"To participate in the community, you must first verify your email address. The verification email was sent to {email}. Resend email."},"localOverride":false},"CachedAsset:text:en_US-pages/kbs/TkbMessagePage-1745595729125":{"__typename":"CachedAsset","id":"text:en_US-pages/kbs/TkbMessagePage-1745595729125","value":{"title":"{contextMessageSubject} | {communityTitle}","errorMissing":"This article cannot be found","name":"TKB Message Page","section.message-list.title":"","archivedMessageTitle":"This Content Has Been Archived","section.erPqcf.title":"","section.erPqcf.description":"","section.message-list.description":""},"localOverride":false},"CachedAsset:text:en_US-components/common/ActionFeedback-1745595729125":{"__typename":"CachedAsset","id":"text:en_US-components/common/ActionFeedback-1745595729125","value":{"joinedGroupHub.title":"Welcome","joinedGroupHub.message":"You are now a member of this group and are subscribed to updates.","groupHubInviteNotFound.title":"Invitation Not Found","groupHubInviteNotFound.message":"Sorry, we could not find your invitation to the group. The owner may have canceled the invite.","groupHubNotFound.title":"Group Not Found","groupHubNotFound.message":"The grouphub you tried to join does not exist. It may have been deleted.","existingGroupHubMember.title":"Already Joined","existingGroupHubMember.message":"You are already a member of this group.","accountLocked.title":"Account Locked","accountLocked.message":"Your account has been locked due to multiple failed attempts. Try again in {lockoutTime} minutes.","editedGroupHub.title":"Changes Saved","editedGroupHub.message":"Your group has been updated.","leftGroupHub.title":"Goodbye","leftGroupHub.message":"You are no longer a member of this group and will not receive future updates.","deletedGroupHub.title":"Deleted","deletedGroupHub.message":"The group has been deleted.","groupHubCreated.title":"Group Created","groupHubCreated.message":"{groupHubName} is ready to use","accountClosed.title":"Account Closed","accountClosed.message":"The account has been closed and you will now be redirected to the homepage","resetTokenExpired.title":"Reset Password Link has Expired","resetTokenExpired.message":"Try resetting your password again","invalidUrl.title":"Invalid URL","invalidUrl.message":"The URL you're using is not recognized. Verify your URL and try again.","accountClosedForUser.title":"Account Closed","accountClosedForUser.message":"{userName}'s account is closed","inviteTokenInvalid.title":"Invitation Invalid","inviteTokenInvalid.message":"Your invitation to the community has been canceled or expired.","inviteTokenError.title":"Invitation Verification Failed","inviteTokenError.message":"The url you are utilizing is not recognized. Verify your URL and try again","pageNotFound.title":"Access Denied","pageNotFound.message":"You do not have access to this area of the community or it doesn't exist","eventAttending.title":"Responded as Attending","eventAttending.message":"You'll be notified when there's new activity and reminded as the event approaches","eventInterested.title":"Responded as Interested","eventInterested.message":"You'll be notified when there's new activity and reminded as the event approaches","eventNotFound.title":"Event Not Found","eventNotFound.message":"The event you tried to respond to does not exist.","redirectToRelatedPage.title":"Showing Related Content","redirectToRelatedPageForBaseUsers.title":"Showing Related Content","redirectToRelatedPageForBaseUsers.message":"The content you are trying to access is archived","redirectToRelatedPage.message":"The content you are trying to access is archived","relatedUrl.archivalLink.flyoutMessage":"The content you are trying to access is archived View Archived Content"},"localOverride":false},"CachedAsset:quiltWrapper:f5.prod:Common:1745954196444":{"__typename":"CachedAsset","id":"quiltWrapper:f5.prod:Common:1745954196444","value":{"id":"Common","header":{"backgroundImageProps":{"assetName":"header.jpg","backgroundSize":"COVER","backgroundRepeat":"NO_REPEAT","backgroundPosition":"LEFT_CENTER","lastModified":"1702932449000","__typename":"BackgroundImageProps"},"backgroundColor":"transparent","items":[{"id":"custom.widget.GainsightShared","props":{"widgetVisibility":"signedInOnly","useTitle":true,"useBackground":false,"title":"","lazyLoad":false},"__typename":"QuiltComponent"},{"id":"custom.widget.Beta_MetaNav","props":{"widgetVisibility":"signedInOrAnonymous","useTitle":true,"useBackground":false,"title":"","lazyLoad":false},"__typename":"QuiltComponent"},{"id":"community.widget.navbarWidget","props":{"showUserName":false,"showRegisterLink":true,"style":{"boxShadow":"var(--lia-bs-box-shadow-sm)","linkFontWeight":"700","controllerHighlightColor":"hsla(30, 100%, 50%)","dropdownDividerMarginBottom":"10px","hamburgerBorderHover":"none","linkFontSize":"15px","linkBoxShadowHover":"none","backgroundOpacity":0.4,"controllerBorderRadius":"var(--lia-border-radius-50)","hamburgerBgColor":"transparent","linkTextBorderBottom":"none","hamburgerColor":"var(--lia-nav-controller-icon-color)","brandLogoHeight":"48px","linkLetterSpacing":"normal","linkBgHoverColor":"transparent","collapseMenuDividerOpacity":0.16,"paddingBottom":"10px","dropdownPaddingBottom":"15px","dropdownMenuOffset":"2px","hamburgerBgHoverColor":"transparent","borderBottom":"0","hamburgerBorder":"none","dropdownPaddingX":"10px","brandMarginRightSm":"10px","linkBoxShadow":"none","linkJustifyContent":"center","linkColor":"var(--lia-bs-primary)","collapseMenuDividerBg":"var(--lia-nav-link-color)","dropdownPaddingTop":"10px","controllerHighlightTextColor":"var(--lia-yiq-dark)","background":{"imageAssetName":"","color":"var(--lia-bs-white)","size":"COVER","repeat":"NO_REPEAT","position":"CENTER_CENTER","imageLastModified":""},"linkBorderRadius":"var(--lia-bs-border-radius-sm)","linkHoverColor":"var(--lia-bs-primary)","position":"FIXED","linkBorder":"none","linkTextBorderBottomHover":"2px solid #0C5C8D","brandMarginRight":"30px","hamburgerHoverColor":"var(--lia-nav-controller-icon-color)","linkBorderHover":"none","collapseMenuMarginLeft":"20px","linkFontStyle":"NORMAL","linkPaddingX":"10px","paddingTop":"10px","linkPaddingY":"5px","linkTextTransform":"NONE","dropdownBorderColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.08)","controllerBgHoverColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.1)","linkDropdownPaddingX":"var(--lia-nav-link-px)","linkBgColor":"transparent","linkDropdownPaddingY":"9px","controllerIconColor":"#0C5C8D","dropdownDividerMarginTop":"10px","linkGap":"10px","controllerIconHoverColor":"#0C5C8D"},"links":{"sideLinks":[],"mainLinks":[{"children":[{"linkType":"INTERNAL","id":"migrated-link-1","params":{"boardId":"TechnicalForum","categoryId":"Forums"},"routeName":"ForumBoardPage"},{"linkType":"INTERNAL","id":"migrated-link-2","params":{"boardId":"WaterCooler","categoryId":"Forums"},"routeName":"ForumBoardPage"}],"linkType":"INTERNAL","id":"migrated-link-0","params":{"categoryId":"Forums"},"routeName":"CategoryPage"},{"children":[{"linkType":"INTERNAL","id":"migrated-link-4","params":{"boardId":"codeshare","categoryId":"CrowdSRC"},"routeName":"TkbBoardPage"},{"linkType":"INTERNAL","id":"migrated-link-5","params":{"boardId":"communityarticles","categoryId":"CrowdSRC"},"routeName":"TkbBoardPage"}],"linkType":"INTERNAL","id":"migrated-link-3","params":{"categoryId":"CrowdSRC"},"routeName":"CategoryPage"},{"children":[{"linkType":"INTERNAL","id":"migrated-link-7","params":{"boardId":"TechnicalArticles","categoryId":"Articles"},"routeName":"TkbBoardPage"},{"linkType":"INTERNAL","id":"article-series","params":{"boardId":"article-series","categoryId":"Articles"},"routeName":"TkbBoardPage"},{"linkType":"INTERNAL","id":"security-insights","params":{"boardId":"security-insights","categoryId":"Articles"},"routeName":"TkbBoardPage"},{"linkType":"INTERNAL","id":"migrated-link-8","params":{"boardId":"DevCentralNews","categoryId":"Articles"},"routeName":"TkbBoardPage"}],"linkType":"INTERNAL","id":"migrated-link-6","params":{"categoryId":"Articles"},"routeName":"CategoryPage"},{"children":[{"linkType":"INTERNAL","id":"migrated-link-10","params":{"categoryId":"CommunityGroups"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"migrated-link-11","params":{"categoryId":"F5-Groups"},"routeName":"CategoryPage"}],"linkType":"INTERNAL","id":"migrated-link-9","params":{"categoryId":"GroupsCategory"},"routeName":"CategoryPage"},{"children":[],"linkType":"INTERNAL","id":"migrated-link-12","params":{"boardId":"Events","categoryId":"top"},"routeName":"EventBoardPage"},{"children":[],"linkType":"INTERNAL","id":"migrated-link-13","params":{"boardId":"Suggestions","categoryId":"top"},"routeName":"IdeaBoardPage"},{"children":[],"linkType":"EXTERNAL","id":"Common-external-link","url":"https://community.f5.com/c/how-do-i","target":"SELF"}]},"className":"QuiltComponent_lia-component-edit-mode__lQ9Z6","showSearchIcon":false},"__typename":"QuiltComponent"},{"id":"community.widget.bannerWidget","props":{"backgroundColor":"transparent","visualEffects":{"showBottomBorder":false},"backgroundImageProps":{"backgroundSize":"COVER","backgroundPosition":"CENTER_CENTER","backgroundRepeat":"NO_REPEAT"},"fontColor":"#222222"},"__typename":"QuiltComponent"},{"id":"community.widget.breadcrumbWidget","props":{"backgroundColor":"var(--lia-bs-primary)","linkHighlightColor":"#FFFFFF","visualEffects":{"showBottomBorder":false},"backgroundOpacity":60,"linkTextColor":"#FFFFFF"},"__typename":"QuiltComponent"}],"__typename":"QuiltWrapperSection"},"footer":{"backgroundImageProps":{"assetName":null,"backgroundSize":"COVER","backgroundRepeat":"NO_REPEAT","backgroundPosition":"CENTER_CENTER","lastModified":null,"__typename":"BackgroundImageProps"},"backgroundColor":"var(--lia-bs-body-color)","items":[{"id":"custom.widget.Beta_Footer","props":{"widgetVisibility":"signedInOrAnonymous","useTitle":true,"useBackground":false,"title":"","lazyLoad":false},"__typename":"QuiltComponent"},{"id":"custom.widget.Tag_Manager_Helper","props":{"widgetVisibility":"signedInOrAnonymous","useTitle":true,"useBackground":false,"title":"","lazyLoad":false},"__typename":"QuiltComponent"},{"id":"custom.widget.Consent_Blackbar","props":{"widgetVisibility":"signedInOrAnonymous","useTitle":true,"useBackground":false,"title":"","lazyLoad":false},"__typename":"QuiltComponent"}],"__typename":"QuiltWrapperSection"},"__typename":"QuiltWrapper","localOverride":false},"localOverride":false},"CachedAsset:component:custom.widget.GainsightShared-en-us-1745595733836":{"__typename":"CachedAsset","id":"component:custom.widget.GainsightShared-en-us-1745595733836","value":{"component":{"id":"custom.widget.GainsightShared","template":{"id":"GainsightShared","markupLanguage":"HTML","style":null,"texts":{},"defaults":{"config":{"applicablePages":[],"description":"Shared functions for Gainsight integration","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"components":[{"id":"custom.widget.GainsightShared","form":null,"config":null,"props":[],"__typename":"Component"}],"grouping":"TEXTHTML","__typename":"ComponentTemplate"},"properties":{"config":{"applicablePages":[],"description":"Shared functions for Gainsight integration","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"form":null,"__typename":"Component","localOverride":false},"globalCss":null,"form":null},"localOverride":false},"CachedAsset:component:custom.widget.Beta_MetaNav-en-us-1745595733836":{"__typename":"CachedAsset","id":"component:custom.widget.Beta_MetaNav-en-us-1745595733836","value":{"component":{"id":"custom.widget.Beta_MetaNav","template":{"id":"Beta_MetaNav","markupLanguage":"HANDLEBARS","style":null,"texts":{},"defaults":{"config":{"applicablePages":[],"description":"MetaNav menu at the top of every page.","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"components":[{"id":"custom.widget.Beta_MetaNav","form":null,"config":null,"props":[],"__typename":"Component"}],"grouping":"CUSTOM","__typename":"ComponentTemplate"},"properties":{"config":{"applicablePages":[],"description":"MetaNav menu at the top of every page.","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"form":null,"__typename":"Component","localOverride":false},"globalCss":null,"form":null},"localOverride":false},"CachedAsset:component:custom.widget.Beta_Footer-en-us-1745595733836":{"__typename":"CachedAsset","id":"component:custom.widget.Beta_Footer-en-us-1745595733836","value":{"component":{"id":"custom.widget.Beta_Footer","template":{"id":"Beta_Footer","markupLanguage":"HANDLEBARS","style":null,"texts":{},"defaults":{"config":{"applicablePages":[],"description":"DevCentral´s custom footer.","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"components":[{"id":"custom.widget.Beta_Footer","form":null,"config":null,"props":[],"__typename":"Component"}],"grouping":"CUSTOM","__typename":"ComponentTemplate"},"properties":{"config":{"applicablePages":[],"description":"DevCentral´s custom footer.","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"form":null,"__typename":"Component","localOverride":false},"globalCss":null,"form":null},"localOverride":false},"CachedAsset:component:custom.widget.Tag_Manager_Helper-en-us-1745595733836":{"__typename":"CachedAsset","id":"component:custom.widget.Tag_Manager_Helper-en-us-1745595733836","value":{"component":{"id":"custom.widget.Tag_Manager_Helper","template":{"id":"Tag_Manager_Helper","markupLanguage":"HANDLEBARS","style":null,"texts":{},"defaults":{"config":{"applicablePages":[],"description":"Helper widget to inject Tag Manager scripts into head element","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"components":[{"id":"custom.widget.Tag_Manager_Helper","form":null,"config":null,"props":[],"__typename":"Component"}],"grouping":"CUSTOM","__typename":"ComponentTemplate"},"properties":{"config":{"applicablePages":[],"description":"Helper widget to inject Tag Manager scripts into head element","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"form":null,"__typename":"Component","localOverride":false},"globalCss":null,"form":null},"localOverride":false},"CachedAsset:component:custom.widget.Consent_Blackbar-en-us-1745595733836":{"__typename":"CachedAsset","id":"component:custom.widget.Consent_Blackbar-en-us-1745595733836","value":{"component":{"id":"custom.widget.Consent_Blackbar","template":{"id":"Consent_Blackbar","markupLanguage":"HTML","style":null,"texts":{},"defaults":{"config":{"applicablePages":[],"description":"","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"components":[{"id":"custom.widget.Consent_Blackbar","form":null,"config":null,"props":[],"__typename":"Component"}],"grouping":"TEXTHTML","__typename":"ComponentTemplate"},"properties":{"config":{"applicablePages":[],"description":"","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"form":null,"__typename":"Component","localOverride":false},"globalCss":null,"form":null},"localOverride":false},"CachedAsset:text:en_US-components/community/Breadcrumb-1745595729125":{"__typename":"CachedAsset","id":"text:en_US-components/community/Breadcrumb-1745595729125","value":{"navLabel":"Breadcrumbs","dropdown":"Additional parent page navigation"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageBanner-1745595729125":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageBanner-1745595729125","value":{"messageMarkedAsSpam":"This post has been marked as spam","messageMarkedAsSpam@board:TKB":"This article has been marked as spam","messageMarkedAsSpam@board:BLOG":"This post has been marked as spam","messageMarkedAsSpam@board:FORUM":"This discussion has been marked as spam","messageMarkedAsSpam@board:OCCASION":"This event has been marked as spam","messageMarkedAsSpam@board:IDEA":"This idea has been marked as spam","manageSpam":"Manage Spam","messageMarkedAsAbuse":"This post has been marked as abuse","messageMarkedAsAbuse@board:TKB":"This article has been marked as abuse","messageMarkedAsAbuse@board:BLOG":"This post has been marked as abuse","messageMarkedAsAbuse@board:FORUM":"This discussion has been marked as abuse","messageMarkedAsAbuse@board:OCCASION":"This event has been marked as abuse","messageMarkedAsAbuse@board:IDEA":"This idea has been marked as abuse","preModCommentAuthorText":"This comment will be published as soon as it is approved","preModCommentModeratorText":"This comment is awaiting moderation","messageMarkedAsOther":"This post has been rejected due to other reasons","messageMarkedAsOther@board:TKB":"This article has been rejected due to other reasons","messageMarkedAsOther@board:BLOG":"This post has been rejected due to other reasons","messageMarkedAsOther@board:FORUM":"This discussion has been rejected due to other reasons","messageMarkedAsOther@board:OCCASION":"This event has been rejected due to other reasons","messageMarkedAsOther@board:IDEA":"This idea has been rejected due to other reasons","messageArchived":"This post was archived on {date}","relatedUrl":"View Related Content","relatedContentText":"Showing related content","archivedContentLink":"View Archived Content"},"localOverride":false},"CachedAsset:text:en_US-components/tkbs/TkbArticleWidget-1745595729125":{"__typename":"CachedAsset","id":"text:en_US-components/tkbs/TkbArticleWidget-1745595729125","value":{},"localOverride":false},"Category:category:Forums":{"__typename":"Category","id":"category:Forums","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Forum:board:TechnicalForum":{"__typename":"Forum","id":"board:TechnicalForum","forumPolicies":{"__typename":"ForumPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"boardPolicies":{"__typename":"BoardPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Forum:board:WaterCooler":{"__typename":"Forum","id":"board:WaterCooler","forumPolicies":{"__typename":"ForumPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"boardPolicies":{"__typename":"BoardPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Articles":{"__typename":"Category","id":"category:Articles","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Tkb:board:TechnicalArticles":{"__typename":"Tkb","id":"board:TechnicalArticles","tkbPolicies":{"__typename":"TkbPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"boardPolicies":{"__typename":"BoardPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Tkb:board:DevCentralNews":{"__typename":"Tkb","id":"board:DevCentralNews","tkbPolicies":{"__typename":"TkbPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"boardPolicies":{"__typename":"BoardPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:GroupsCategory":{"__typename":"Category","id":"category:GroupsCategory","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:F5-Groups":{"__typename":"Category","id":"category:F5-Groups","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:CommunityGroups":{"__typename":"Category","id":"category:CommunityGroups","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Occasion:board:Events":{"__typename":"Occasion","id":"board:Events","boardPolicies":{"__typename":"BoardPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"occasionPolicies":{"__typename":"OccasionPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Idea:board:Suggestions":{"__typename":"Idea","id":"board:Suggestions","boardPolicies":{"__typename":"BoardPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"ideaPolicies":{"__typename":"IdeaPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Tkb:board:communityarticles":{"__typename":"Tkb","id":"board:communityarticles","tkbPolicies":{"__typename":"TkbPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"boardPolicies":{"__typename":"BoardPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Tkb:board:security-insights":{"__typename":"Tkb","id":"board:security-insights","tkbPolicies":{"__typename":"TkbPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"boardPolicies":{"__typename":"BoardPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Tkb:board:article-series":{"__typename":"Tkb","id":"board:article-series","tkbPolicies":{"__typename":"TkbPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"boardPolicies":{"__typename":"BoardPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"QueryVariables:TopicReplyList:message:278318:1":{"__typename":"QueryVariables","id":"TopicReplyList:message:278318:1","value":{"id":"message:278318","first":10,"sorts":{"postTime":{"direction":"ASC"}},"repliesFirst":3,"repliesFirstDepthThree":1,"repliesSorts":{"postTime":{"direction":"ASC"}},"useAvatar":true,"useAuthorLogin":true,"useAuthorRank":true,"useBody":true,"useKudosCount":true,"useTimeToRead":false,"useMedia":false,"useReadOnlyIcon":false,"useRepliesCount":true,"useSearchSnippet":false,"useAcceptedSolutionButton":false,"useSolvedBadge":false,"useAttachments":false,"attachmentsFirst":5,"useTags":true,"useNodeAncestors":false,"useUserHoverCard":false,"useNodeHoverCard":false,"useModerationStatus":true,"usePreviewSubjectModal":false,"useMessageStatus":true}},"ROOT_MUTATION":{"__typename":"Mutation"},"CachedAsset:text:en_US-components/community/Navbar-1745595729125":{"__typename":"CachedAsset","id":"text:en_US-components/community/Navbar-1745595729125","value":{"community":"Community Home","inbox":"Inbox","manageContent":"Manage Content","tos":"Terms of Service","forgotPassword":"Forgot Password","themeEditor":"Theme Editor","edit":"Edit Navigation Bar","skipContent":"Skip to content","migrated-link-9":"Groups","migrated-link-7":"Technical Articles","migrated-link-8":"DevCentral News","migrated-link-1":"Technical Forum","migrated-link-10":"Community Groups","migrated-link-2":"Water Cooler","migrated-link-11":"F5 Groups","Common-external-link":"How Do I...?","migrated-link-0":"Forums","article-series":"Article Series","migrated-link-5":"Community Articles","migrated-link-6":"Articles","security-insights":"Security Insights","migrated-link-3":"CrowdSRC","migrated-link-4":"CodeShare","migrated-link-12":"Events","migrated-link-13":"Suggestions"},"localOverride":false},"CachedAsset:text:en_US-components/community/NavbarHamburgerDropdown-1745595729125":{"__typename":"CachedAsset","id":"text:en_US-components/community/NavbarHamburgerDropdown-1745595729125","value":{"hamburgerLabel":"Side Menu"},"localOverride":false},"CachedAsset:text:en_US-components/community/BrandLogo-1745595729125":{"__typename":"CachedAsset","id":"text:en_US-components/community/BrandLogo-1745595729125","value":{"logoAlt":"Khoros","themeLogoAlt":"Brand Logo"},"localOverride":false},"CachedAsset:text:en_US-components/community/NavbarTextLinks-1745595729125":{"__typename":"CachedAsset","id":"text:en_US-components/community/NavbarTextLinks-1745595729125","value":{"more":"More"},"localOverride":false},"CachedAsset:text:en_US-components/authentication/AuthenticationLink-1745595729125":{"__typename":"CachedAsset","id":"text:en_US-components/authentication/AuthenticationLink-1745595729125","value":{"title.login":"Sign In","title.registration":"Register","title.forgotPassword":"Forgot Password","title.multiAuthLogin":"Sign In"},"localOverride":false},"CachedAsset:text:en_US-components/nodes/NodeLink-1745595729125":{"__typename":"CachedAsset","id":"text:en_US-components/nodes/NodeLink-1745595729125","value":{"place":"Place {name}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageView/MessageViewStandard-1745595729125":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageView/MessageViewStandard-1745595729125","value":{"anonymous":"Anonymous","author":"{messageAuthorLogin}","authorBy":"{messageAuthorLogin}","board":"{messageBoardTitle}","replyToUser":" to {parentAuthor}","showMoreReplies":"Show More","replyText":"Reply","repliesText":"Replies","markedAsSolved":"Marked as Solution","movedMessagePlaceholder.BLOG":"{count, plural, =0 {This comment has been} other {These comments have been} }","movedMessagePlaceholder.TKB":"{count, plural, =0 {This comment has been} other {These comments have been} }","movedMessagePlaceholder.FORUM":"{count, plural, =0 {This reply has been} other {These replies have been} }","movedMessagePlaceholder.IDEA":"{count, plural, =0 {This comment has been} other {These comments have been} }","movedMessagePlaceholder.OCCASION":"{count, plural, =0 {This comment has been} other {These comments have been} }","movedMessagePlaceholderUrlText":"moved.","messageStatus":"Status: ","statusChanged":"Status changed: {previousStatus} to {currentStatus}","statusAdded":"Status added: {status}","statusRemoved":"Status removed: {status}","labelExpand":"expand replies","labelCollapse":"collapse replies","unhelpfulReason.reason1":"Content is outdated","unhelpfulReason.reason2":"Article is missing information","unhelpfulReason.reason3":"Content is for a different Product","unhelpfulReason.reason4":"Doesn't match what I was searching for"},"localOverride":false},"CachedAsset:text:en_US-components/messages/ThreadedReplyList-1745595729125":{"__typename":"CachedAsset","id":"text:en_US-components/messages/ThreadedReplyList-1745595729125","value":{"title":"{count, plural, one{# Reply} other{# Replies}}","title@board:BLOG":"{count, plural, one{# Comment} other{# Comments}}","title@board:TKB":"{count, plural, one{# Comment} other{# Comments}}","title@board:IDEA":"{count, plural, one{# Comment} other{# Comments}}","title@board:OCCASION":"{count, plural, one{# Comment} other{# Comments}}","noRepliesTitle":"No Replies","noRepliesTitle@board:BLOG":"No Comments","noRepliesTitle@board:TKB":"No Comments","noRepliesTitle@board:IDEA":"No Comments","noRepliesTitle@board:OCCASION":"No Comments","noRepliesDescription":"Be the first to reply","noRepliesDescription@board:BLOG":"Be the first to comment","noRepliesDescription@board:TKB":"Be the first to comment","noRepliesDescription@board:IDEA":"Be the first to comment","noRepliesDescription@board:OCCASION":"Be the first to comment","messageReadOnlyAlert:BLOG":"Comments have been turned off for this post","messageReadOnlyAlert:TKB":"Comments have been turned off for this article","messageReadOnlyAlert:IDEA":"Comments have been turned off for this idea","messageReadOnlyAlert:FORUM":"Replies have been turned off for this discussion","messageReadOnlyAlert:OCCASION":"Comments have been turned off for this event"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageReplyCallToAction-1745595729125":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageReplyCallToAction-1745595729125","value":{"leaveReply":"Leave a reply...","leaveReply@board:BLOG@message:root":"Leave a comment...","leaveReply@board:TKB@message:root":"Leave a comment...","leaveReply@board:IDEA@message:root":"Leave a comment...","leaveReply@board:OCCASION@message:root":"Leave a comment...","repliesTurnedOff.FORUM":"Replies are turned off for this topic","repliesTurnedOff.BLOG":"Comments are turned off for this topic","repliesTurnedOff.TKB":"Comments are turned off for this topic","repliesTurnedOff.IDEA":"Comments are turned off for this topic","repliesTurnedOff.OCCASION":"Comments are turned off for this topic","infoText":"Stop poking me!"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/common/QueryHandler-1745595729125":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/QueryHandler-1745595729125","value":{"title":"Query Handler"},"localOverride":false},"CachedAsset:text:en_US-components/community/NavbarDropdownToggle-1745595729125":{"__typename":"CachedAsset","id":"text:en_US-components/community/NavbarDropdownToggle-1745595729125","value":{"ariaLabelClosed":"Press the down arrow to open the menu"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageSubject-1745595729125":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageSubject-1745595729125","value":{"noSubject":"(no subject)"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageBody-1745595729125":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageBody-1745595729125","value":{"showMessageBody":"Show More","mentionsErrorTitle":"{mentionsType, select, board {Board} user {User} message {Message} other {}} No Longer Available","mentionsErrorMessage":"The {mentionsType} you are trying to view has been removed from the community.","videoProcessing":"Video is being processed. Please try again in a few minutes.","bannerTitle":"Video provider requires cookies to play the video. Accept to continue or {url} it directly on the provider's site.","buttonTitle":"Accept","urlText":"watch"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageCustomFields-1745595729125":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageCustomFields-1745595729125","value":{"CustomField.default.label":"Value of {name}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageRevision-1745595729125":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageRevision-1745595729125","value":{"lastUpdatedDatePublished":"{publishCount, plural, one{Published} other{Updated}} {date}","lastUpdatedDateDraft":"Created {date}","version":"Version {major}.{minor}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageReplyButton-1745595729125":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageReplyButton-1745595729125","value":{"repliesCount":"{count}","title":"Reply","title@board:BLOG@message:root":"Comment","title@board:TKB@message:root":"Comment","title@board:IDEA@message:root":"Comment","title@board:OCCASION@message:root":"Comment"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageAuthorBio-1745595729125":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageAuthorBio-1745595729125","value":{"sendMessage":"Send Message","actionMessage":"Follow this blog board to get notified when there's new activity","coAuthor":"CO-PUBLISHER","contributor":"CONTRIBUTOR","userProfile":"View Profile","iconlink":"Go to {name} {type}"},"localOverride":false},"CachedAsset:text:en_US-components/guides/GuideBottomNavigation-1745595729125":{"__typename":"CachedAsset","id":"text:en_US-components/guides/GuideBottomNavigation-1745595729125","value":{"nav.label":"Previous/Next Page","nav.previous":"Previous","nav.next":"Next"},"localOverride":false},"CachedAsset:text:en_US-components/tags/TagView/TagViewChip-1745595729125":{"__typename":"CachedAsset","id":"text:en_US-components/tags/TagView/TagViewChip-1745595729125","value":{"tagLabelName":"Tag name {tagName}"},"localOverride":false},"CachedAsset:text:en_US-components/users/UserLink-1745595729125":{"__typename":"CachedAsset","id":"text:en_US-components/users/UserLink-1745595729125","value":{"authorName":"View Profile: {author}","anonymous":"Anonymous"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/users/UserRank-1745595729125":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/users/UserRank-1745595729125","value":{"rankName":"{rankName}","userRank":"Author rank {rankName}"},"localOverride":false},"CachedAsset:text:en_US-components/users/UserRegistrationDate-1745595729125":{"__typename":"CachedAsset","id":"text:en_US-components/users/UserRegistrationDate-1745595729125","value":{"noPrefix":"{date}","withPrefix":"Joined {date}"},"localOverride":false},"CachedAsset:text:en_US-components/customComponent/CustomComponent-1745595729125":{"__typename":"CachedAsset","id":"text:en_US-components/customComponent/CustomComponent-1745595729125","value":{"errorMessage":"Error rendering component id: {customComponentId}","bannerTitle":"Video provider requires cookies to play the video. Accept to continue or {url} it directly on the provider's site.","buttonTitle":"Accept","urlText":"watch"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/users/UserAvatar-1745595729125":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/users/UserAvatar-1745595729125","value":{"altText":"{login}'s avatar","altTextGeneric":"User's avatar"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/ranks/UserRankLabel-1745595729125":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/ranks/UserRankLabel-1745595729125","value":{"altTitle":"Icon for {rankName} rank"},"localOverride":false}}}},"page":"/kbs/TkbMessagePage/TkbMessagePage","query":{"boardId":"codeshare","messageSubject":"ps-twitter-api","messageId":"278318"},"buildId":"ISAhs0UxT148eG089lpQq","runtimeConfig":{"buildInformationVisible":false,"logLevelApp":"info","logLevelMetrics":"info","openTelemetryClientEnabled":false,"openTelemetryConfigName":"f5","openTelemetryServiceVersion":"25.3.0","openTelemetryUniverse":"prod","openTelemetryCollector":"http://localhost:4318","openTelemetryRouteChangeAllowedTime":"5000","apolloDevToolsEnabled":false,"inboxMuteWipFeatureEnabled":false},"isFallback":false,"isExperimentalCompile":false,"dynamicIds":["./components/customComponent/CustomComponent/CustomComponent.tsx","./components/community/Navbar/NavbarWidget.tsx","./components/community/Breadcrumb/BreadcrumbWidget.tsx","./components/tkbs/TkbArticleWidget/TkbArticleWidget.tsx","./components/messages/MessageView/MessageViewStandard/MessageViewStandard.tsx","./components/messages/ThreadedReplyList/ThreadedReplyList.tsx","./components/customComponent/CustomComponentContent/TemplateContent.tsx","../shared/client/components/common/List/UnwrappedList/UnwrappedList.tsx","./components/tags/TagView/TagView.tsx","./components/tags/TagView/TagViewChip/TagViewChip.tsx","./components/customComponent/CustomComponentContent/HtmlContent.tsx","./components/customComponent/CustomComponentContent/CustomComponentScripts.tsx"],"appGip":true,"scriptLoader":[]}