Dưới đây là một kịch bản tôi đã viết một khi trở lại cho thấy làm thế nào để gửi tweets với Thẻ địa lý. Điều này sử dụng WebClient.
http://www.ravichaganti.com/blog/?p=979
Dán mã ở đây để dễ tham khảo.
Function ByPass-Proxy {
param ([string]$url)
$webClient.Proxy.IsBypassed($url)
}
Function Get-GeoCoordinates {
param ([String]$location)
$baseURL = "http://maps.google.com/maps/geo?q="
$apiKey = "Your API Key"
$url = $baseURL + $location + "&output=xml&sensor=false&key=" + $apiKey
$locCoords = (([xml]($WebClient.DownloadString($url))).kml.Response.Placemark.Point.coordinates)
return $locCoords
}
Function Send-Tweet {
param ([string]$Tweet,[string]$location)
$geoCoord = Get-GeoCoordinates $location
$long = $geoCoord.Split(",")[0]
$lat = $geoCoord.Split(",")[1]
$TwitURL = "http://twitter.com/statuses/update.xml"
$WebClient.Credentials = $TwitCredentials
#$str = [System.Text.Encoding]::UTF8.GetBytes("status=" + $Tweet + "&lat=" + $lat + "&long=" + $long)
$str = "status=" + $Tweet + "&lat=" + $lat + "&long=" + $long
[System.Net.ServicePointManager]::Expect100Continue = $false
$response = $WebClient.UploadString($TwitURL,$str)
$response
}
function Get-Credential {
## Grabbed this from http://poshcode.org/1480
[CmdletBinding(DefaultParameterSetName="Better")]
PARAM(
[Parameter(Position=1,Mandatory=$false)]
[Alias("Credential")]
[PSObject]$UserName=$null,
[Parameter(Position=2,Mandatory=$false)]
[string]$Title=$null,
[Parameter(Position=3,Mandatory=$false)]
[string]$Message=$null,
[Parameter(Position=4,Mandatory=$false)]
[string]$Domain=$null,
[Parameter(Mandatory=$false)]
[switch]$GenericCredentials,
[Parameter(Mandatory=$false)]
[switch]$Inline
)
PROCESS {
if($UserName -is [System.Management.Automation.PSCredential]) {
return $UserName
} elseif($UserName -ne $null) {
$UserName = $UserName.ToString()
}
if($Inline) {
if($Title) { Write-Host $Title }
if($Message) { Write-Host $Message }
if($Domain) {
if($UserName -and $UserName -notmatch "[@\\]") {
$UserName = "${Domain}\${UserName}"
}
}
if(!$UserName) {
$UserName = Read-Host "User"
if(($Domain -OR !$GenericCredentials) -and $UserName -notmatch "[@\\]") {
$UserName = "${Domain}\${UserName}"
}
}
return New-Object System.Management.Automation.PSCredential $UserName,$(Read-Host "Password for user $UserName" -AsSecureString)
}
if($GenericCredentials) { $Credential = "Generic" } else { $Credential = "Domain" }
## Now call the Host.UI method ... if they don't have one, we'll die, yay.
## BugBug? PowerShell.exe disregards the last parameter
$Host.UI.PromptForCredential($Title, $Message, $UserName, $Domain, $Credential,"Default")
}
}
$global:webClient = New-Object System.Net.WebClient
$global:TwitCredentials = Get-Credential -title "Twitter Credentials" -message "Please enter your Twitter username/password"
If (!(ByPass-Proxy "http://www.twitter.com")) {
$global:Webclient.proxy.Credentials = Get-Credential -title "Proxy Credentials" -message "Please enter username/password for Proxy authentication"
}