<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Загрузка фотографии в беседу через API ВКонтакте]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=15221&amp;type=atom" />
	<updated>2020-03-03T13:45:12Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=15221</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Загрузка фотографии в беседу через API ВКонтакте]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=138241#p138241" />
			<content type="html"><![CDATA[<p>Потанцевал танцы с бубнами с документацией, и до меня допёрло.<br />Всё таки написано там про это, не досмотрел.</p><p><span class="postimg"><img src="https://imgur.com/l03YuON.png" alt="https://imgur.com/l03YuON.png" /></span></p><p>Вот так в моём коде надо запросы отредактировать и всё пашет <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p><div class="codebox"><pre><code>HTTP.Open(&quot;GET&quot;, proxy &quot;api.vk.com/method/photos.getMessagesUploadServer?peer_id=&quot; vk_id &quot;&amp;&amp;access_token=&quot; vk_token &quot;&amp;v=5.103&quot;, true)

HTTP.Open(&quot;GET&quot;, proxy &quot;api.vk.com/method/messages.send?v=5.85&amp;access_token=&quot; vk_token &quot;&amp;chat_id=&quot; conversation &quot;&amp;peer_id=&quot; chat_id &quot;&amp;message=&amp;attachment=&quot; attachment, false)</code></pre></div>]]></content>
			<author>
				<name><![CDATA[kolotilov256]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=40656</uri>
			</author>
			<updated>2020-03-03T13:45:12Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=138241#p138241</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Загрузка фотографии в беседу через API ВКонтакте]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=138239#p138239" />
			<content type="html"><![CDATA[<p>peer_id - это получатель.<br />Надо тут читать:<br /><a href="https://vk.com/dev/bots_docs">https://vk.com/dev/bots_docs</a></p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2020-03-03T13:34:11Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=138239#p138239</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Загрузка фотографии в беседу через API ВКонтакте]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=138236#p138236" />
			<content type="html"><![CDATA[<p>Вот только вопрос, что указывать в peer_id ?<br />Пробовал id самой группы (https://vk.com/club182104136) (Вот эти 182104136)<br />Пробовал chat_id (который 200000000+cвой ид)<br />Пробовал отрицательный id (-182104136)</p><p>Ничего не сработало.</p><p>А по поводу того, почему удалил peer_id :<br />По моей логике фотография должна загружается куда-то в саму группу, а далее уже передаваться прикреплённой ссылкой в беседу.<br />На скриншоте в документации так и написано (Параметр peer_id , для загрузки фотографии в сообщениях сообществ)<br />У меня не личные сообщения сообщества, у меня беседа сообщества.</p><p><span class="postimg"><img src="https://imgur.com/lpRc8Uv.png" alt="https://imgur.com/lpRc8Uv.png" /></span></p>]]></content>
			<author>
				<name><![CDATA[kolotilov256]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=40656</uri>
			</author>
			<updated>2020-03-03T13:19:02Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=138236#p138236</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Загрузка фотографии в беседу через API ВКонтакте]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=138235#p138235" />
			<content type="html"><![CDATA[<p>А где в апи написано, что если peer_id - группа, то ее айди указывать не надо?<br /></p><div class="codebox"><pre><code>  if conversation
      HTTP.Open(&quot;GET&quot;, proxy &quot;api.vk.com/method/photos.getMessagesUploadServer?&amp;access_token=&quot; vk_token &quot;&amp;v=5.103&quot;, true)
   else HTTP.Open(&quot;GET&quot;, proxy &quot;api.vk.com/method/photos.getMessagesUploadServer?peer_id=&quot; vk_id &quot;&amp;access_token=&quot; vk_token &quot;&amp;v=5.103&quot;, true)</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2020-03-03T13:15:28Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=138235#p138235</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: Загрузка фотографии в беседу через API ВКонтакте]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=138234#p138234" />
			<content type="html"><![CDATA[<p>Здравствуйте. <br />Подскажите пожалуйста, почему в беседу ВКонтакте (созданную через группу) не получается отправить фотографию?</p><p>Выдаёт вот такую ошибку:<br /><span class="postimg"><img src="https://imgur.com/9GNJmSl.png" alt="https://imgur.com/9GNJmSl.png" /></span></p><p>P.S: Да, я понимаю, что скорее всего дело в отрицательном user_id (т.к это беседа, а не определённый человек), но что писать вместо него? В документации API ВКонтакте покопался, в методах photos.getMessagesUploadServer , photos.saveMessagesPhoto , и там к сожалению нет никаких намёков об отправке в беседу.</p><p><strong>Code:</strong></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><div class="codebox"><pre><code>#SingleInstance Force
#Persistent
#NoEnv
#Include CreateFormData.ahk

global vk_id := 123456789
global vk_token := &quot;b8da9ffae451f1453e3beded6afae451f1453b82d759f60473fae451f1453cfe95dfae451f1453bc83ec519f&quot;
global conversation := 1

global chat_id := 2000000000 + conversation
global proxy := &quot;https://&quot; ; &quot;https://vk-api-proxy.xtrafrancyz.net/_/&quot;

uploadScreenshotToVK(&quot;screen.png&quot;)
ExitApp

JsonEvalToObj(json_text)
{
   JSONvar = 
   (LTrim Join 
   %json_text% 
   )

   htmldoc := ComObjCreate(&quot;htmlfile&quot;) 
   Script := htmldoc.Script 
   Script.execScript(&quot; &quot;, &quot;JScript&quot;) 
   json_obj := Script.eval(&quot;(&quot; . JSONvar . &quot;)&quot;) 
   
   return json_obj
}

uploadScreenshotToVK(file_path)
{
   HTTP := ComObjCreate(&quot;WinHttp.WinHttpRequest.5.1&quot;)
   if conversation
      HTTP.Open(&quot;GET&quot;, proxy &quot;api.vk.com/method/photos.getMessagesUploadServer?&amp;access_token=&quot; vk_token &quot;&amp;v=5.103&quot;, true)
   else HTTP.Open(&quot;GET&quot;, proxy &quot;api.vk.com/method/photos.getMessagesUploadServer?peer_id=&quot; vk_id &quot;&amp;access_token=&quot; vk_token &quot;&amp;v=5.103&quot;, true)
   HTTP.Send()
   HTTP.WaitForResponse()
   RegexMatch(HTTP.responsetext, &quot;upload_url&quot;&quot;:&quot;&quot;(.+?)&quot;&quot;&quot;, match)
   server := StrReplace(match1, &quot;\/&quot;, &quot;/&quot;)
   objParam := {photo: [file_path]}
   
   CreateFormData(PostData, hdr_ContentType, objParam)
   HTTP.Open(&quot;POST&quot;, server, true)
   HTTP.SetRequestHeader(&quot;Content-Type&quot;, hdr_ContentType)
   HTTP.Send(PostData)
   HTTP.WaitForResponse()
   RegexMatch(HTTP.responsetext, &quot;\{&quot;&quot;server&quot;&quot;:(.+?),&quot;&quot;photo&quot;&quot;:&quot;&quot;(.+?)&quot;&quot;,&quot;&quot;hash&quot;&quot;:&quot;&quot;(.+?)&quot;&quot;&quot;, match)
   match2 := StrReplace(match2, &quot;\&quot;&quot;&quot;, &quot;&quot;&quot;&quot;)

   HTTP.Open(&quot;GET&quot;, proxy &quot;api.vk.com/method/photos.saveMessagesPhoto?server=&quot; match1 &quot;&amp;photo=&quot; match2 &quot;&amp;hash=&quot; match3 &quot;&amp;access_token=&quot; vk_token &quot;&amp;v=5.103&quot;, true)
   HTTP.Send()
   HTTP.WaitForResponse()

   json_obj := JsonEvalToObj(HTTP.ResponseText)
   attachment := &quot;photo&quot; json_obj.response.0.owner_id &quot;_&quot; json_obj.response.0.id
   
   HTTP := ComObjCreate(&quot;WinHttp.WinHttpRequest.5.1&quot;)
   if conversation
      HTTP.Open(&quot;GET&quot;, proxy &quot;api.vk.com/method/messages.send?v=5.85&amp;access_token=&quot; vk_token &quot;&amp;user_id=&quot; conversation &quot;&amp;message=&amp;attachment=&quot; attachment, false)
   else HTTP.Open(&quot;GET&quot;, proxy &quot;api.vk.com/method/messages.send?v=5.85&amp;access_token=&quot; vk_token &quot;&amp;user_id=&quot; vk_id &quot;&amp;message=&amp;attachment=&quot; attachment, false)
   HTTP.Send()
   HTTP.WaitForResponse()
   
   msgBox % HTTP.ResponseText
}</code></pre></div></div></div><p><strong>Include code:</strong><br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><div class="codebox"><pre><code>
; CreateFormData() by tmplinshi, AHK Topic: https://autohotkey.com/boards/viewtopic.php?t=7647
; Thanks to Coco: https://autohotkey.com/boards/viewtopic.php?p=41731#p41731
; Modified version by SKAN, 09/May/2016

CreateFormData(ByRef retData, ByRef retHeader, objParam) {
	New CreateFormData(retData, retHeader, objParam)
}

Class CreateFormData {

	__New(ByRef retData, ByRef retHeader, objParam) {

		Local CRLF := &quot;`r`n&quot;, i, k, v, str, pvData
		; Create a random Boundary
		Local Boundary := this.RandomBoundary()
		Local BoundaryLine := &quot;------------------------------&quot; . Boundary

    this.Len := 0 ; GMEM_ZEROINIT|GMEM_FIXED = 0x40
    this.Ptr := DllCall( &quot;GlobalAlloc&quot;, &quot;UInt&quot;,0x40, &quot;UInt&quot;,1, &quot;Ptr&quot;  )          ; allocate global memory

		; Loop input paramters
		For k, v in objParam
		{
			If IsObject(v) {
				For i, FileName in v
				{
					str := BoundaryLine . CRLF
					     . &quot;Content-Disposition: form-data; name=&quot;&quot;&quot; . k . &quot;&quot;&quot;; filename=&quot;&quot;&quot; . FileName . &quot;&quot;&quot;&quot; . CRLF
					     . &quot;Content-Type: &quot; . this.MimeType(FileName) . CRLF . CRLF
          this.StrPutUTF8( str )
          this.LoadFromFile( Filename )
          this.StrPutUTF8( CRLF )
				}
			} Else {
				str := BoundaryLine . CRLF
				     . &quot;Content-Disposition: form-data; name=&quot;&quot;&quot; . k &quot;&quot;&quot;&quot; . CRLF . CRLF
				     . v . CRLF
        this.StrPutUTF8( str )
			}
		}

		this.StrPutUTF8( BoundaryLine . &quot;--&quot; . CRLF )

    ; Create a bytearray and copy data in to it.
    retData := ComObjArray( 0x11, this.Len ) ; Create SAFEARRAY = VT_ARRAY|VT_UI1
    pvData  := NumGet( ComObjValue( retData ) + 8 + A_PtrSize )
    DllCall( &quot;RtlMoveMemory&quot;, &quot;Ptr&quot;,pvData, &quot;Ptr&quot;,this.Ptr, &quot;Ptr&quot;,this.Len )

    this.Ptr := DllCall( &quot;GlobalFree&quot;, &quot;Ptr&quot;,this.Ptr, &quot;Ptr&quot; )                   ; free global memory 

    retHeader := &quot;multipart/form-data; boundary=----------------------------&quot; . Boundary
	}

  StrPutUTF8( str ) {
    Local ReqSz := StrPut( str, &quot;utf-8&quot; ) - 1
    this.Len += ReqSz                                  ; GMEM_ZEROINIT|GMEM_MOVEABLE = 0x42
    this.Ptr := DllCall( &quot;GlobalReAlloc&quot;, &quot;Ptr&quot;,this.Ptr, &quot;UInt&quot;,this.len + 1, &quot;UInt&quot;, 0x42 )   
    StrPut( str, this.Ptr + this.len - ReqSz, ReqSz, &quot;utf-8&quot; )
  }
  
  LoadFromFile( Filename ) {
    Local objFile := FileOpen( FileName, &quot;r&quot; )
    this.Len += objFile.Length                     ; GMEM_ZEROINIT|GMEM_MOVEABLE = 0x42 
    this.Ptr := DllCall( &quot;GlobalReAlloc&quot;, &quot;Ptr&quot;,this.Ptr, &quot;UInt&quot;,this.len, &quot;UInt&quot;, 0x42 )
    objFile.RawRead( this.Ptr + this.Len - objFile.length, objFile.length )
    objFile.Close()       
  }

	RandomBoundary() {
		str := &quot;0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z&quot;
		Sort, str, D| Random
		str := StrReplace(str, &quot;|&quot;)
		Return SubStr(str, 1, 12)
	}

	MimeType(FileName) {
		n := FileOpen(FileName, &quot;r&quot;).ReadUInt()
		Return (n        = 0x474E5089) ? &quot;image/png&quot;
		     : (n        = 0x38464947) ? &quot;image/gif&quot;
		     : (n&amp;0xFFFF = 0x4D42    ) ? &quot;image/bmp&quot;
		     : (n&amp;0xFFFF = 0xD8FF    ) ? &quot;image/jpeg&quot;
		     : (n&amp;0xFFFF = 0x4949    ) ? &quot;image/tiff&quot;
		     : (n&amp;0xFFFF = 0x4D4D    ) ? &quot;image/tiff&quot;
		     : &quot;application/octet-stream&quot;
	}

}</code></pre></div></div></div>]]></content>
			<author>
				<name><![CDATA[kolotilov256]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=40656</uri>
			</author>
			<updated>2020-03-03T12:59:24Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=138234#p138234</id>
		</entry>
</feed>
