По мотивам — Powershell и Google Drive API (Загрузить файл на гугл диск)
1) Скачиваем и устанавливаем Google Data APIs (GData)
2) Создаем аккаунт Google, если отсутствует — https://accounts.google.com
3) Переходим на сайт https://cloud.google.com/console
4) Создаем новое или выбираем существующий проект
5) Переходим в меню APIs & auth -> APIs
6) Включаем нужные API (Drive API и Drive SDK) в значение ON
7) Переходим в меню APIs & auth -> Registered apps и нажать Register app
8) Указать название приложения(для нашего примера Test) и выбрать тип Native
9) Выбираем наше приложение и выбираем пункт Update(требуется указать почтовый адрес и название нашего приложения)
Воспользуемся примером кода «Uploading a new document or file with both metadata and content«.
#Загружаем требуемые библиотеки(путь может быть изменен,Program Files) Add-Type -Path "C:\Program Files (x86)\Google\Google Data API SDK\Redist\Google.GData.Documents.dll" Add-Type -Path "C:\Program Files (x86)\Google\Google Data API SDK\Redist\Google.GData.Client.dll" #Учетные данные Google Account $glogin = 'Login' $gpass = 'password' #Файл для загрузки $FileToUpload = "C:\PDF\wp__understanding-wmi-malware.pdf" # Имя файла без расширения $fname = [System.IO.Path]::GetFileNameWithoutExtension($FileToUpload) #Указываем API, отделяя их запятой,список - https://support.google.com/a/answer/162106?hl=ru $scopes = "https://docs.google.com/feeds/ https://docs.googleusercontent.com/" #Подтавляем данные из пункта №9 $param = New-Object Google.GData.Client.OAuth2Parameters -Property @{ ClientId = "ID" ClientSecret = "Secret" RedirectUri = "urn:ietf:wg:oauth:2.0:oob" Scope = $scopes } #Получаем ссылку для авторизации OAuth $url = [Google.GData.Client.OAuthUtil]::CreateOAuth2AuthorizationUrl($param) #После перехода по ссылке получаем код $ie = New-Object -ComObject InternetExplorer.Application $ie.Navigate($url) While ($ie.busy -eq $true) {Start-Sleep -Milliseconds 500} While ($ie.Document.Title -match "не подключены") {Start-Sleep -Milliseconds 500} If ($ie.Document.Title -match "Вход"){ $login=$ie.document.getElementByID("Email") $login.Value=$glogin $pass=$ie.document.getElementByID("Passwd") $pass.Value=$gpass $ie.document.getElementByID("signIn") | Foreach {$_.click()} While ($ie.busy -eq $true) {Start-Sleep -Milliseconds 500} } If ($ie.Document.Title -match "Запрос на разрешение") { $ie.Document.Forms.Item(0) | where {$_.innerText -eq "Принять"} | Foreach {$_.click()} While ($ie.busy -eq $true) {Start-Sleep -Milliseconds 500} If($ie.Document.Body.outerHTML -match 'value="(.+)"><script') {$global:param.AccessCode = $matches[1]} } $ie.Quit() #Получаем токен авторизации и создаем аутентификатор [Google.GData.Client.OAuthUtil]::GetAccessToken($param) $authenticator = New-Object Google.GData.Client.OAuth2Authenticator("Test",$param) $rf = new-object Google.GData.Client.GOAuth2RequestFactory("apps", "Test", $param) $service = New-Object Google.GData.Documents.DocumentsService("Test") $service.RequestFactory = $rf #Формируем документ на отправку $dentry=New-Object Google.GData.Documents.DocumentEntry $dentry.Title.Text="$fname" $dentry.MediaSource=New-Object Google.GData.Client.MediaFileSource($FileToUpload,"application/pdf") $createUploadUrl=New-Object System.Uri("https://docs.google.com/feeds/upload/create-session/default/private/full") $link=New-Object Google.GData.Client.AtomLink($createUploadUrl) $link.Rel = [Google.GData.Client.ResumableUpload.ResumableUploader]::CreateMediaRelation $dentry.Links.Add($link) $dentry.Service=$service #Загрузка файла $uploader=New-Object Google.GData.Client.ResumableUpload.ResumableUploader Register-ObjectEvent -InputObject $uploader -EventName AsyncOperationProgress -Action { Write-Progress -activity Upload -status 'Progress->' -percentcomplete $EventArgs.ProgressPercentage} | Out-Null Register-ObjectEvent -InputObject $uploader -EventName AsyncOperationCompleted -Action { Get-EventSubscriber | Unregister-Event -Force Write-Host -ForegroundColor Yellow "Completed!!!" } | Out-Null $uploader.InsertAsync($authenticator, $dentry, (new-object object))
А для работы с почтой есть что-то подобное? Сходу не вижу в доступных API ничего похожего на работу с ящиком gmail.
Зависит все от задач:
https://developers.google.com/gdata/faq?hl=nl-NL&csw=1#GmailAtomFeed
Does Gmail have a Data API?
No, but you can use http://gmail.google.com/support/bin/answer.py?answer=13465 Gmail’s Atom feed (http://gmail.google.com/support/bin/answer.py?answer=13465) with AuthSub or OAuth 1 to request read-only access to a user’s unread messages. The scope should be set to https://mail.google.com/mail/feed/atom/. An example query would be:
GET https://mail.google.com/mail/feed/atom/
If you’re interested in managing your mail, Gmail also has IMAP/POP support.
Например, Read the Gmail Inbox Feed with .NET and OAuth — http://googleappsdeveloper.blogspot.ru/2011/09/read-gmail-inbox-feed-with-net-and.html
Задача — зайти в ящик, найти нужное сообщение, потом удалить. То есть что-то типа EWS, но только для gmail.
За ссылки спасибо, почитаю.
1) Включаем в настройках IMAP
2) Качаем — http://imapx.codeplex.com
3) Удаляем письма от TechTarget
Add-Type -Path «C:\IMAPX\v4.5\InterIMAP.dll»
$login = ‘GLOGIN’
$pass = ‘GPASSWORD’
$imap = New-Object ImapX.ImapClient(«imap.gmail.com»,»993″,$true,$true)
if($imap.Connect()) {
if($imap.Login($login,$pass)) {
$in = $imap.Folders.Item(«INBOX»)
$messages = $in.Search(‘FROM «TechTarget»‘,0x200,-1)
$messages | Foreach {$_.Remove()}
}
}
$imap.Disconnect()
Посмотреть фильтр — http://tools.ietf.org/html/rfc3501#section-6.4.4
Error: redirect_uri_mismatch
устарело! secret не нужен, в мануал гугл устарело, е**** как хочешь
Солышн, найти найти ссылку Open original console и создать новый clientid для мод устройств, тип другие и там появится client_secret
ну код опят не пашет копаю дальше
Удалось!
Код давно не может парсить ключ нормально, исправил