Documentation
¶
Overview ¶
Package jsonseo — официальный Go SDK для JSON SEO API: выдача Яндекса, Google и Bing, картинки и видео, подсказки, Вордстат, прогноз Директа и геолокация по IP.
client, err := jsonseo.New("YOUR_KEY")
serp, err := client.Yandex(ctx, "купить ноутбук", jsonseo.Params{"region": 213})
Index ¶
- Constants
- Variables
- type APIError
- type Ad
- type AdSitelink
- type AiAnswer
- type AiAnswerSource
- type BalanceResponse
- type Client
- func (c *Client) Balance(ctx context.Context) (*BalanceResponse, error)
- func (c *Client) Bing(ctx context.Context, query string, params ...Params) (*SearchResponse, error)
- func (c *Client) BingImages(ctx context.Context, query string, params ...Params) (*ImagesResponse, error)
- func (c *Client) BingSuggest(ctx context.Context, query string, params ...Params) (*SuggestResponse, error)
- func (c *Client) BingVideo(ctx context.Context, query string, params ...Params) (*VideoResponse, error)
- func (c *Client) Call(ctx context.Context, path string, params Params, out any) error
- func (c *Client) CallRaw(ctx context.Context, path string, params Params) (string, error)
- func (c *Client) Direct(ctx context.Context, phrases []string, params ...Params) (*DirectResponse, error)
- func (c *Client) Geoip(ctx context.Context, ip string, params ...Params) (*GeoipResponse, error)
- func (c *Client) Google(ctx context.Context, query string, params ...Params) (*SearchResponse, error)
- func (c *Client) GoogleImages(ctx context.Context, query string, params ...Params) (*ImagesResponse, error)
- func (c *Client) GoogleRegions(ctx context.Context, name string, params ...Params) (*GoogleRegionsResponse, error)
- func (c *Client) GoogleSuggest(ctx context.Context, query string, params ...Params) (*SuggestResponse, error)
- func (c *Client) GoogleVideo(ctx context.Context, query string, params ...Params) (*VideoResponse, error)
- func (c *Client) Wordstat(ctx context.Context, text string, params ...Params) (*WordstatResponse, error)
- func (c *Client) WordstatFrequency(ctx context.Context, text string, params ...Params) (*WordstatFrequencyResponse, error)
- func (c *Client) WordstatGraph(ctx context.Context, text string, params ...Params) (*WordstatGraphResponse, error)
- func (c *Client) WordstatMap(ctx context.Context, text string, params ...Params) (*WordstatMapResponse, error)
- func (c *Client) Yandex(ctx context.Context, text string, params ...Params) (*SearchResponse, error)
- func (c *Client) YandexImages(ctx context.Context, query string, params ...Params) (*ImagesResponse, error)
- func (c *Client) YandexRegions(ctx context.Context, name string, params ...Params) (*YandexRegionsResponse, error)
- func (c *Client) YandexSuggest(ctx context.Context, text string, params ...Params) (*SuggestResponse, error)
- func (c *Client) YandexVideo(ctx context.Context, query string, params ...Params) (*VideoResponse, error)
- type DirectForecast
- type DirectPosition
- type DirectResponse
- type GeoipResponse
- type GoogleRegion
- type GoogleRegionsResponse
- type ImageResult
- type ImagesResponse
- type Option
- func WithAttempts(attempts int) Option
- func WithAuthInQuery() Option
- func WithBaseURL(url string) Option
- func WithHTTPClient(client *http.Client) Option
- func WithMaxRetryDelay(delay time.Duration) Option
- func WithRetryDelay(delay time.Duration) Option
- func WithTimeout(timeout time.Duration) Option
- func WithUserAgent(agent string) Option
- type Params
- type ParseError
- type SearchResponse
- type SearchResult
- type SuggestResponse
- type TransportError
- type VideoResponse
- type VideoResult
- type WordstatFrequencyResponse
- type WordstatGraphPoint
- type WordstatGraphResponse
- type WordstatMapResponse
- type WordstatMapRow
- type WordstatPhrase
- type WordstatResponse
- type YandexRegion
- type YandexRegionsResponse
Constants ¶
const DefaultBaseURL = "https://jsonseo.ru/api"
DefaultBaseURL — адрес API по умолчанию.
const Version = "1.0.2"
Version — версия SDK, уезжает в User-Agent.
Variables ¶
var ( ErrUnauthorized = errors.New("jsonseo: ключ не передан или недействителен") // ErrPaymentRequired — 402: на счёте не хватает средств. ErrPaymentRequired = errors.New("jsonseo: на счёте не хватает средств") // ErrValidation — 422: параметры не приняты. Деньги не списываются. ErrValidation = errors.New("jsonseo: параметры запроса не приняты") // ErrRateLimited — 429: превышен лимит частоты. ErrRateLimited = errors.New("jsonseo: превышен лимит частоты") ErrServiceUnavailable = errors.New("jsonseo: выдачу получить не вышло") // ErrTimeout — ответа не дождались. Автоматически не повторяется. ErrTimeout = errors.New("jsonseo: ответа не дождались") // ErrIncompleteResponse — пришло меньше, чем обещал сервис. ErrIncompleteResponse = errors.New("jsonseo: ответ пришёл не целиком") // ErrNetwork — до сервиса не достучались: сеть, DNS, TLS. ErrNetwork = errors.New("jsonseo: запрос не удался") // ErrParse — ответ пришёл, но не разобрался как JSON. ErrParse = errors.New("jsonseo: ответ не разобрался как JSON") // ErrInvalidArgument — SDK забраковал аргументы, запрос не отправлялся. ErrInvalidArgument = errors.New("jsonseo: неверный аргумент") )
Сигнальные ошибки для errors.Is. Отказы сервиса приезжают как *APIError, который сам сопоставляется с нужной из них по HTTP-статусу.
Functions ¶
This section is empty.
Types ¶
type APIError ¶
type APIError struct {
// Status — HTTP-статус ответа.
Status int
// Message — сообщение сервиса.
Message string
// Body — тело ответа как есть.
Body string
// Payload — разобранный JSON ответа. Пустой, если тело не разобралось.
Payload map[string]any
// Errors — ошибки по именам параметров, приходят с 422.
Errors map[string][]string
// RetryAfter — через сколько секунд вернуться. 0, если срок не назван.
RetryAfter int
}
APIError — сервис ответил отказом. Тело сохраняется целиком.
type Ad ¶
type Ad struct {
// Block — top до органики, bottom после неё, inline между результатами.
Block string `json:"block"`
// Position — место среди объявлений своего блока, с единицы.
Position int `json:"position"`
// Page — страница выдачи: нумерация с нуля и абсолютная.
Page int `json:"page"`
Domain string `json:"domain"`
URL string `json:"url,omitempty"`
DisplayURL string `json:"displayUrl,omitempty"`
Title string `json:"title,omitempty"`
Description string `json:"description,omitempty"`
Label string `json:"label,omitempty"`
Format string `json:"format,omitempty"`
Group int `json:"group,omitempty"`
Sitelinks []AdSitelink `json:"sitelinks,omitempty"`
}
Ad — рекламное объявление со страницы выдачи.
type AdSitelink ¶
type AdSitelink struct {
Title string `json:"title"`
URL string `json:"url,omitempty"`
Description string `json:"description,omitempty"`
}
AdSitelink — быстрая ссылка под текстом объявления.
type AiAnswer ¶
type AiAnswer struct {
Markdown string `json:"markdown"`
Sources []AiAnswerSource `json:"sources,omitempty"`
// FollowUps — только Яндекс: уточняющие вопросы под ответом.
FollowUps []string `json:"followUps,omitempty"`
}
AiAnswer — блок нейросети над выдачей: Алиса AI, AI Overview, Copilot.
type AiAnswerSource ¶
type AiAnswerSource struct {
// ID — номер источника: им подписаны сноски у Яндекса и Bing.
ID int `json:"id"`
URL string `json:"url"`
Domain string `json:"domain"`
Title string `json:"title,omitempty"`
Description string `json:"description,omitempty"`
// Citations — сколько сносок ведёт на источник. Только Яндекс и Bing.
Citations int `json:"citations,omitempty"`
}
AiAnswerSource — источник, на который опирается ответ нейросети.
type BalanceResponse ¶
BalanceResponse — остаток на счёте.
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client — клиент JSON SEO API. Безопасен для одновременного использования.
func (*Client) Balance ¶
func (c *Client) Balance(ctx context.Context) (*BalanceResponse, error)
Balance — текущий баланс. Бесплатно, нужен ключ.
func (*Client) Bing ¶
Bing — органическая выдача bing.com: без локации — Россия. 0.01 ₽ за страницу.
func (*Client) BingImages ¶
func (c *Client) BingImages(ctx context.Context, query string, params ...Params) (*ImagesResponse, error)
BingImages — картинки Bing: count карточек (по умолчанию 35), дальше 700-й Bing не листает.
func (*Client) BingSuggest ¶
func (c *Client) BingSuggest(ctx context.Context, query string, params ...Params) (*SuggestResponse, error)
BingSuggest — подсказки Bing. 0.01 ₽ за запрос.
func (*Client) BingVideo ¶
func (c *Client) BingVideo(ctx context.Context, query string, params ...Params) (*VideoResponse, error)
BingVideo — видео Bing: count карточек на страницу, по умолчанию 105.
func (*Client) Call ¶
Call — произвольный метод API, если в сервисе появился новый. Ответ разбирается в out.
func (*Client) Direct ¶
func (c *Client) Direct(ctx context.Context, phrases []string, params ...Params) (*DirectResponse, error)
Direct — прогноз показов Директа со ставками и бюджетом. Кабинет не нужен.
0.01 ₽ за пачку до 4000 символов (около 150 фраз). До 1000 фраз за запрос, 100 запросов в час. Вид частотности задаётся операторами во фразе: "ремонт айфона" — фразовая, "!ремонт !айфона" — точная.
func (*Client) Google ¶
func (c *Client) Google(ctx context.Context, query string, params ...Params) (*SearchResponse, error)
Google — органическая выдача google.com: мобильная. 0.01 ₽ за страницу.
func (*Client) GoogleImages ¶
func (c *Client) GoogleImages(ctx context.Context, query string, params ...Params) (*ImagesResponse, error)
GoogleImages — картинки Google: 100 карточек на страницу. 0.01 ₽ за страницу.
func (*Client) GoogleRegions ¶
func (c *Client) GoogleRegions(ctx context.Context, name string, params ...Params) (*GoogleRegionsResponse, error)
GoogleRegions — ID региона Google по названию и готовый uule. Бесплатно, нужен ключ.
func (*Client) GoogleSuggest ¶
func (c *Client) GoogleSuggest(ctx context.Context, query string, params ...Params) (*SuggestResponse, error)
GoogleSuggest — подсказки Google: до ~15 фраз. 0.01 ₽ за запрос.
func (*Client) GoogleVideo ¶
func (c *Client) GoogleVideo(ctx context.Context, query string, params ...Params) (*VideoResponse, error)
GoogleVideo — видео Google: 10 карточек на страницу. 0.01 ₽ за страницу.
func (*Client) Wordstat ¶
func (c *Client) Wordstat(ctx context.Context, text string, params ...Params) (*WordstatResponse, error)
Wordstat — популярные и похожие запросы. 0.01 ₽ за запрос.
func (*Client) WordstatFrequency ¶
func (c *Client) WordstatFrequency(ctx context.Context, text string, params ...Params) (*WordstatFrequencyResponse, error)
WordstatFrequency — частота запроса одним числом: Results.TotalValue. 0.01 ₽ за запрос.
func (*Client) WordstatGraph ¶
func (c *Client) WordstatGraph(ctx context.Context, text string, params ...Params) (*WordstatGraphResponse, error)
WordstatGraph — динамика показов: month и week с 2018 года, day — последние 60 дней. 0.01 ₽ за запрос.
func (*Client) WordstatMap ¶
func (c *Client) WordstatMap(ctx context.Context, text string, params ...Params) (*WordstatMapResponse, error)
WordstatMap — показы по регионам и городам. Popularity — affinity-индекс: 100 означает средний интерес. 0.01 ₽ за запрос.
func (*Client) Yandex ¶
func (c *Client) Yandex(ctx context.Context, text string, params ...Params) (*SearchResponse, error)
Yandex — органическая выдача Яндекса: мобильная, регион 213. 0.01 ₽ за страницу.
func (*Client) YandexImages ¶
func (c *Client) YandexImages(ctx context.Context, query string, params ...Params) (*ImagesResponse, error)
YandexImages — картинки Яндекса: 20 карточек на страницу. 0.01 ₽ за страницу.
func (*Client) YandexRegions ¶
func (c *Client) YandexRegions(ctx context.Context, name string, params ...Params) (*YandexRegionsResponse, error)
YandexRegions — код региона (lr) по названию города или области. Бесплатно, нужен ключ.
func (*Client) YandexSuggest ¶
func (c *Client) YandexSuggest(ctx context.Context, text string, params ...Params) (*SuggestResponse, error)
YandexSuggest — подсказки Яндекса: до 50 фраз с учётом региона. 0.01 ₽ за запрос.
func (*Client) YandexVideo ¶
func (c *Client) YandexVideo(ctx context.Context, query string, params ...Params) (*VideoResponse, error)
YandexVideo — видео Яндекса: 20 карточек на страницу. 0.01 ₽ за страницу.
type DirectForecast ¶
type DirectForecast struct {
Phrase string `json:"phrase"`
Shows int `json:"shows"`
// Positions — места аукциона: набор задаёт сам Директ.
Positions map[string]DirectPosition `json:"positions"`
}
DirectForecast — прогноз по одной фразе.
type DirectPosition ¶
type DirectPosition struct {
Bid float64 `json:"bid"`
Budget float64 `json:"budget"`
Clicks int `json:"clicks"`
CTR float64 `json:"ctr"`
Shows int `json:"shows"`
}
DirectPosition — прогноз по одному месту аукциона.
type DirectResponse ¶
type DirectResponse struct {
Geo int `json:"geo"`
Period string `json:"period"`
// Batches — на сколько пачек разбит список: по ним считается стоимость.
Batches int `json:"batches"`
Processed int `json:"processed"`
Results []DirectForecast `json:"results"`
Errors []string `json:"errors"`
}
DirectResponse — прогноз показов Яндекс Директа.
type GeoipResponse ¶
type GeoipResponse struct {
IP string `json:"ip"`
Latitude float64 `json:"latitude"`
Longitude float64 `json:"longitude"`
Region struct {
// ID тот же, что у Яндекса: годится для параметра region.
ID int `json:"id"`
Name string `json:"name"`
} `json:"region"`
Country struct {
ID int `json:"id"`
Name string `json:"name"`
ISOName string `json:"iso_name"`
} `json:"country"`
}
GeoipResponse — геолокация по IP.
type GoogleRegion ¶
type GoogleRegion struct {
ID int `json:"id"`
Name string `json:"name"`
Subname string `json:"subname"`
Type string `json:"type"`
TypeName string `json:"type_name"`
CanonicalName string `json:"canonical_name"`
UULE string `json:"uule"`
Lat float64 `json:"lat"`
Lon float64 `json:"lon"`
}
GoogleRegion — регион Google: вместе с ID приходит готовый uule.
type GoogleRegionsResponse ¶
type GoogleRegionsResponse struct {
Name string `json:"name"`
Lang string `json:"lang"`
Regions []GoogleRegion `json:"regions"`
}
GoogleRegionsResponse — ответ справочника регионов Google.
type ImageResult ¶
type ImageResult struct {
URL string `json:"url"`
Title string `json:"title"`
Domain string `json:"domain"`
SourceURL string `json:"sourceUrl"`
Thumbnail string `json:"thumbnail,omitempty"`
// Width и Height — размер оригинала. Ноль означает «поисковик не назвал».
Width int `json:"width,omitempty"`
Height int `json:"height,omitempty"`
ThumbnailWidth int `json:"thumbnailWidth,omitempty"`
ThumbnailHeight int `json:"thumbnailHeight,omitempty"`
Bytes int `json:"bytes,omitempty"`
}
ImageResult — карточка картинки: первые четыре поля есть всегда.
type ImagesResponse ¶
type ImagesResponse struct {
Pages int `json:"pages"`
Exhausted bool `json:"exhausted"`
Query string `json:"query"`
URL string `json:"url,omitempty"`
Results []ImageResult `json:"results"`
Ads []Ad `json:"ads,omitempty"`
}
ImagesResponse — ответ поиска по картинкам.
type Option ¶
Option настраивает клиент.
func WithAttempts ¶
WithAttempts задаёт общее число попыток, включая первую. По умолчанию три.
func WithAuthInQuery ¶
func WithAuthInQuery() Option
WithAuthInQuery переносит ключ из заголовка в параметр key — там, где заголовки до API не доходят.
func WithHTTPClient ¶
WithHTTPClient подставляет свой http.Client — для прокси, своего транспорта или тестов.
func WithMaxRetryDelay ¶
WithMaxRetryDelay задаёт потолок паузы. Если сервис просит ждать дольше, повторов не будет вовсе — в том числе при нуле: он означает «не ждать ни секунды», а не «без потолка».
func WithRetryDelay ¶
WithRetryDelay задаёт стартовую паузу между попытками.
func WithTimeout ¶
WithTimeout задаёт, сколько ждать ответа на одну попытку.
По умолчанию пять минут: многостраничная выдача идёт минутами, и оборванный запрос всё равно будет досчитан и оплачен.
func WithUserAgent ¶
WithUserAgent задаёт свою подпись клиента.
type Params ¶
Params — необязательные параметры метода.
Запись открыта не для удобства: вертикали принимают и родные параметры поисковиков — tbs, isize, qft, — перечислить которые нельзя, они меняются вместе с поисковиками.
client.Yandex(ctx, "купить ноутбук", jsonseo.Params{"region": 213, "ads": true})
type ParseError ¶
ParseError — успех, но тело не разобралось как JSON. Тело сохраняется: страница уже оплачена, и достать из неё данные руками лучше, чем ничего.
func (*ParseError) Error ¶
func (e *ParseError) Error() string
func (*ParseError) Is ¶
func (e *ParseError) Is(target error) bool
func (*ParseError) Unwrap ¶
func (e *ParseError) Unwrap() error
type SearchResponse ¶
type SearchResponse struct {
// Pages — сколько страниц получено: ровно за них и списано.
Pages int `json:"pages"`
// Exhausted — выдача закончилась, повторять с большим pages незачем.
Exhausted bool `json:"exhausted"`
// BreakDomainHit — поиск остановлен доменом из break_domain.
BreakDomainHit bool `json:"breakDomainHit"`
Query string `json:"query"`
RawQuery string `json:"rawQuery"`
Region string `json:"region,omitempty"`
// FilterDescription — только Google: почему часть результатов скрыта.
FilterDescription string `json:"filter_description,omitempty"`
// Found — только Яндекс: сколько нашлось, округлённо самим поисковиком.
// nil, если разобрать не удалось.
Found *int64 `json:"found,omitempty"`
FoundHuman string `json:"found_human,omitempty"`
// Mkt и Lang — только Bing: фактические рынок и язык выдачи.
Mkt string `json:"mkt,omitempty"`
Lang string `json:"lang,omitempty"`
// Lr — только Яндекс: регион, в котором выполнен поиск.
Lr int `json:"lr,omitempty"`
URL string `json:"url,omitempty"`
Results []SearchResult `json:"results"`
// AiAnswer приходит только при ai=1 и только если поисковик его показал.
AiAnswer *AiAnswer `json:"aiAnswer,omitempty"`
// Ads приходит только при ads=1. Пустой, но не nil срез значит, что
// рекламу просили, а её не было; nil — что не просили.
Ads []Ad `json:"ads,omitempty"`
}
SearchResponse — ответ органической выдачи, общий для трёх поисковиков.
type SearchResult ¶
type SearchResult struct {
URL string `json:"url"`
Domain string `json:"domain"`
Title string `json:"title"`
Passage string `json:"passage"`
Breadcrumbs string `json:"breadcrumbs,omitempty"`
// Mime — тип документа: pdf, doc, xls. Пусто у обычных страниц.
Mime string `json:"mime,omitempty"`
MimeType string `json:"mime_type,omitempty"`
}
SearchResult — органический результат выдачи.
type SuggestResponse ¶
type SuggestResponse struct {
Query string `json:"query"`
Results []string `json:"results"`
// Lr — только Яндекс: регион, в котором собраны подсказки.
Lr string `json:"lr,omitempty"`
}
SuggestResponse — ответ поисковых подсказок.
type TransportError ¶
TransportError — обмен не состоялся или оборвался. Kind говорит, какой именно: от него зависит, повторяем мы запрос или нет.
func (*TransportError) Error ¶
func (e *TransportError) Error() string
func (*TransportError) Is ¶
func (e *TransportError) Is(target error) bool
func (*TransportError) Unwrap ¶
func (e *TransportError) Unwrap() error
type VideoResponse ¶
type VideoResponse struct {
Pages int `json:"pages"`
Exhausted bool `json:"exhausted"`
Query string `json:"query"`
URL string `json:"url,omitempty"`
Results []VideoResult `json:"results"`
}
VideoResponse — ответ поиска по видео.
type VideoResult ¶
type VideoResult struct {
URL string `json:"url"`
Title string `json:"title"`
Domain string `json:"domain"`
Thumbnail string `json:"thumbnail,omitempty"`
// Duration — длительность в секундах. nil означает «длина неизвестна»,
// а не ноль: у прямых эфиров вместо подписи стоит LIVE.
Duration *int `json:"duration,omitempty"`
DurationText string `json:"durationText,omitempty"`
Published int64 `json:"published,omitempty"`
PublishedText string `json:"publishedText,omitempty"`
// Views — просмотры подписью поисковика: 6,8K. Точного значения нет.
Views string `json:"views,omitempty"`
Provider string `json:"provider,omitempty"`
Channel string `json:"channel,omitempty"`
Description string `json:"description,omitempty"`
Breadcrumbs string `json:"breadcrumbs,omitempty"`
}
VideoResult — карточка видео.
type WordstatFrequencyResponse ¶
type WordstatFrequencyResponse struct {
Text string `json:"text"`
Region string `json:"region"`
Device string `json:"device"`
Results struct {
TotalValue int `json:"totalValue"`
} `json:"results"`
// Error — почему данных нет: Вордстат не принял фразу из-за синтаксиса
// операторов. Ответ при этом удачный и оплаченный, а результаты пустые.
// У обычного ответа поле пустое.
Error string `json:"error,omitempty"`
}
WordstatFrequencyResponse — частота запроса одним числом.
type WordstatGraphPoint ¶
type WordstatGraphPoint struct {
Date string `json:"date"`
Text string `json:"text"`
// Absolute — показы за период.
Absolute int `json:"absolute"`
// Relative — доля среди всех показов Яндекса.
Relative float64 `json:"relative"`
}
WordstatGraphPoint — точка динамики показов.
type WordstatGraphResponse ¶
type WordstatGraphResponse struct {
Text string `json:"text"`
Region string `json:"region"`
Device string `json:"device"`
Type string `json:"type"`
Results struct {
Graph []WordstatGraphPoint `json:"graph"`
} `json:"results"`
// Error — почему данных нет: Вордстат не принял фразу из-за синтаксиса
// операторов. Ответ при этом удачный и оплаченный, а результаты пустые.
// У обычного ответа поле пустое.
Error string `json:"error,omitempty"`
}
WordstatGraphResponse — динамика показов.
type WordstatMapResponse ¶
type WordstatMapResponse struct {
Text string `json:"text"`
Device string `json:"device"`
Type string `json:"type"`
Results struct {
Rows []WordstatMapRow `json:"rows"`
} `json:"results"`
// Error — почему данных нет: Вордстат не принял фразу из-за синтаксиса
// операторов. Ответ при этом удачный и оплаченный, а результаты пустые.
// У обычного ответа поле пустое.
Error string `json:"error,omitempty"`
}
WordstatMapResponse — география показов.
type WordstatMapRow ¶
type WordstatMapRow struct {
Type string `json:"type"`
Text string `json:"text"`
Absolute int `json:"absolute"`
// Popularity — affinity-индекс: 100 означает средний интерес.
Popularity float64 `json:"popularity"`
Relative float64 `json:"relative"`
// RegionID годится для параметра region других методов. nil, если
// название неоднозначно.
RegionID *int `json:"region_id"`
}
WordstatMapRow — строка географии показов.
type WordstatPhrase ¶
WordstatPhrase — строка списка запросов Вордстата.
type WordstatResponse ¶
type WordstatResponse struct {
Text string `json:"text"`
Region string `json:"region"`
Device string `json:"device"`
Results struct {
// Popular — что ищут вместе с этой фразой.
Popular []WordstatPhrase `json:"popular"`
// Associations — соседняя семантика.
Associations []WordstatPhrase `json:"associations"`
} `json:"results"`
// Error — почему данных нет: Вордстат не принял фразу из-за синтаксиса
// операторов. Ответ при этом удачный и оплаченный, а результаты пустые.
// У обычного ответа поле пустое.
Error string `json:"error,omitempty"`
}
WordstatResponse — популярные и похожие запросы.
type YandexRegion ¶
type YandexRegion struct {
ID int `json:"id"`
Name string `json:"name"`
Subname string `json:"subname"`
Lat float64 `json:"lat"`
Lon float64 `json:"lon"`
}
YandexRegion — регион Яндекса из справочника.
type YandexRegionsResponse ¶
type YandexRegionsResponse struct {
Name string `json:"name"`
Lang string `json:"lang"`
Regions []YandexRegion `json:"regions"`
}
YandexRegionsResponse — ответ справочника регионов Яндекса.