<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Блоги: заметки с тегом язык гоу</title>
<link>https://blogengine.ru/blogs/tags/yazyk-gou/</link>
<description>Автоматически собираемая лента заметок, написанных в блогах на Эгее</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.0 (v4079e)</generator>

<itunes:subtitle>Автоматически собираемая лента заметок, написанных в блогах на Эгее</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit>no</itunes:explicit>

<item>
<title>Управление «Алисой»</title>
<guid isPermaLink="false">126353</guid>
<link>https://bolknote.ru/all/upravlenie-alisoy/</link>
<pubDate>Thu, 21 Mar 2024 23:19:58 +0500</pubDate>
<author>Евгений Степанищев</author>
<comments>https://bolknote.ru/all/upravlenie-alisoy/</comments>
<description>
&lt;p&gt;&lt;a href="https://bolknote.ru/"&gt;Евгений Степанищев&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;Хочу попробовать решить одну прикладную задачу, пока не буду описывать какую. Для этого надо научиться управлять яндексовской «Алисой» из локальной сети. В идеале — проговаривать произвольную фразу. Почитал интернет, посмотрел как это делается.&lt;/p&gt;
&lt;p&gt;Официальный документации нет, но хорошие люди провели обратную разработку и задача выглядит как будто бы не очень сложно. Получаем токен, в сети через &lt;i&gt;mDNS&lt;/i&gt; по имени &lt;tt&gt;_yandexio._tcp.local.&lt;/tt&gt; ищем нужную колонку, находим, команды отдаём по протоколу &lt;i&gt;WebSocket&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;Так как я сейчас &lt;a href="https://bolknote.ru/all/kniga-protiv-kompyutera/"&gt;стараюсь&lt;/a&gt; больше времени проводить за книгой, чем за компьютером, всё, что успел — освоить модуль &lt;tt&gt;zeroconf&lt;/tt&gt; для Гоу, чтобы по имени колонки получать её айпи-адрес и порт.&lt;/p&gt;
&lt;p&gt;Получившийся код выглядит так:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="go"&gt;import &amp;quot;github.com/grandcat/zeroconf&amp;quot;
// …тут остальные импорты…

const Service = &amp;quot;_yandexio._tcp&amp;quot;
const Domain = &amp;quot;local.&amp;quot;

func getAlisaAddr(instance string) (*zeroconf.ServiceEntry, error) {
    resolver, err := zeroconf.NewResolver(nil)
    if err != nil {
        log.Fatalln(&amp;quot;Failed to initialize resolver:&amp;quot;, err)
    }

    entries := make(chan *zeroconf.ServiceEntry)
    ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)

    err = resolver.Lookup(ctx, instance, Service, Domain, entries)
    if err != nil {
        return nil, err
    }

    entry := &amp;lt;-entries
    cancel()

    &amp;lt;-ctx.Done()

    if entry == nil {
        return nil, fmt.Errorf(
              &amp;quot;Failed to lookup for service instance &amp;#039;%s&amp;#039;&amp;quot;,
              instance
       )
    }

    return entry, nil
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Теперь надо разобраться где взять токен и как выглядят команды.&lt;/p&gt;
</description>
</item>


</channel>
</rss>