Twitter известен своим Fail Whale , а Twitter API также получает неудовлетворительную оценку; это ужасно.
Твиттер тренды текущий метод API поиска ответ может быть выражен (используя только две тенденции для упрощения примеров) в канонической нормализованной форме JSON как:
{
"as_of":1268069036,
"trends":[
{"name":"Happy Women's Day","query":"\"Happy Women's Day\" OR \"Women's Day\""},
{"name":"#MusicMonday","query":"#MusicMonday"},{"name":"#MM","query":"#MM"}
]
}
Дата as_of
указана в Unix-времени, в секундах с 1/1970 / *.
В Go это можно описать как:
type Trend struct {
Name string
Query string
}
type Current struct {
As_of int64
Trends []Trend
}
Twitter искажает каноническую, нормализованную форму JSON и становится:
{
"as_of":1268069036,
"trends":{
"2010-03-08 17:23:56":[
{"name":"Happy Women's Day","query":"\"Happy Women's Day\" OR \"Women's Day\""},
{"name":"#MusicMonday","query":"#MusicMonday"}
]
}
}
Иногда Twitter возвращает эту эквивалентную форму JSON.
{
"trends":{
"2010-03-08 17:23:56":[
{"name":"Happy Women's Day","query":"\"Happy Women's Day\" OR \"Women's Day\""},
{"name":"#MusicMonday","query":"#MusicMonday"}
]
},
"as_of":1268069036
}
"2010-03-08 17:23:56":
- это имя объекта JSON. Однако это - бессмысленно - строковая форма as_of
.
Если мы заменим "2010-03-08 17:23:56":
на имя объекта "ntrends":
(для вложенных трендов), перезаписав избыточное as_of
строковое время, мы получим следующую пересмотренную форму Twitter JSON:
{
"as_of":1268069036,
"trends":{
"ntrends":[
{"name":"Happy Women's Day","query":"\"Happy Women's Day\" OR \"Women's Day\""},
{"name":"#MusicMonday","query":"#MusicMonday"}
]
}
}
Легко отсканировать форму JSON в Twitter на "as_of":
, прочитать следующее число как as_of
время Unix и преобразовать его в форму имени JSON, например ::101036
var aoUnixTime int64
// insert code to find and convert as_of Unix time to aoUnixTime
aoName := time.SecondsToUTC(aoUnix).Format(`"2006-01-02 15:04:05":`)
Теперь мы можем отсканировать форму Twitter JSON для значения aoName
и заменить его на "ntrends":
, чтобы получить исправленную форму Twitter JSON.
В Go исправленная форма JSON в Twitter может быть описана следующим образом:
type Trend struct {
Name string
Query string
}
type NTrends struct {
NTrends []Trend
}
type Current struct {
As_of int64
Trends NTrends
}
Примечание: первый символ идентификаторов структуры и поля в верхнем регистре, чтобы их можно было экспортировать.
Я запрограммировал и протестировал этот подход, и, похоже, он работает. Поскольку это школьный проект для вас, я не опубликовал свой код.