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