overhaul of request and http system
This commit is contained in:
parent
889a4e7a8b
commit
a6e5336913
66
api.go
66
api.go
@ -39,19 +39,28 @@ func Request(path string) []byte {
|
|||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close()
|
||||||
|
|
||||||
//fmt.Println("response Status:", resp.Status)
|
|
||||||
//fmt.Println("response Headers:", resp.Header)
|
|
||||||
//fmt.Printf("%s %s %d\n", resp.Request.Method, url("about.json"), resp.StatusCode)
|
|
||||||
|
|
||||||
if resp.StatusCode == 200 {
|
if resp.StatusCode == 200 {
|
||||||
/*var result map[string]interface{}
|
|
||||||
json.Unmarshal([]byte(body), &result)
|
|
||||||
return result*/
|
|
||||||
return body
|
return body
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Category returns category json data
|
||||||
|
func Category() map[string]interface{} {
|
||||||
|
var category Categories
|
||||||
|
json.Unmarshal(Request("categories"), &category)
|
||||||
|
m := structs.Map(category)
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
// Category returns category json data
|
||||||
|
func CategoryTopic(path string) map[string]interface{} {
|
||||||
|
var topics CategoryTopics
|
||||||
|
json.Unmarshal(Request("/c/"+path), &topics)
|
||||||
|
m := structs.Map(topics)
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
// About gets json data from about page
|
// About gets json data from about page
|
||||||
func About() map[string]interface{} {
|
func About() map[string]interface{} {
|
||||||
var about AutoGen
|
var about AutoGen
|
||||||
@ -59,18 +68,45 @@ func About() map[string]interface{} {
|
|||||||
for i := 0; i < len(about.About.Admins); i++ {
|
for i := 0; i < len(about.About.Admins); i++ {
|
||||||
about.About.Admins[i].AvatarTemplate = strings.ReplaceAll(about.About.Admins[i].AvatarTemplate, "{size}", "120")
|
about.About.Admins[i].AvatarTemplate = strings.ReplaceAll(about.About.Admins[i].AvatarTemplate, "{size}", "120")
|
||||||
}
|
}
|
||||||
//return about
|
|
||||||
m := structs.Map(about)
|
m := structs.Map(about)
|
||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|
||||||
/*// GetTopics gets topic list from tag
|
// Tag returns tags json data
|
||||||
func GetTopics(path string) *TagTopics {
|
func Tag() map[string]interface{} {
|
||||||
var topics TagTopics
|
var tags Tags
|
||||||
json.Unmarshal(Request(path), &topics)
|
json.Unmarshal(Request("tags"), &tags)
|
||||||
return &topics
|
m := structs.Map(tags)
|
||||||
}*/
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetTopics gets topic list from tag
|
||||||
|
func GetTopics(path string) (topics TagTopics) {
|
||||||
|
json.Unmarshal(Request("/tags/"+path), &topics)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// Topics n/a
|
// Topics n/a
|
||||||
func Topics(path string) {
|
func Topics(path string) map[string]interface{} {
|
||||||
|
topics := GetTopics(path)
|
||||||
|
var topic TopicsList
|
||||||
|
for i := 0; i < len(topics.TopicList.Topics); i++ {
|
||||||
|
var t Topic
|
||||||
|
json.Unmarshal(Request("/t/"+topics.TopicList.Topics[i].Slug), &t)
|
||||||
|
for j := 0; j < len(t.PostStream.Posts); j++ {
|
||||||
|
if t.PostStream.Posts[j].PostNumber != 1 {
|
||||||
|
t.PostStream.Posts[j].Cooked = ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
t.Details.CreatedBy.AvatarTemplate = strings.ReplaceAll(t.Details.CreatedBy.AvatarTemplate, "{size}", "120")
|
||||||
|
s := strings.SplitAfter(t.PostStream.Posts[0].Cooked, "</p>")
|
||||||
|
t.PostStream.Posts[0].Cooked = s[0]
|
||||||
|
r := strings.ReplaceAll(t.PostStream.Posts[0].Cooked, "href=\"/u/", "href=\""+url("")+"u/")
|
||||||
|
t.PostStream.Posts[0].Cooked = r
|
||||||
|
ts, _ := time.Parse("2006-01-02T15:04:05Z07:00", t.CreatedAt)
|
||||||
|
t.CreatedAt = ts.Format("January 2, 2006")
|
||||||
|
topic.Topic = append(topic.Topic, t)
|
||||||
|
}
|
||||||
|
m := structs.Map(topic)
|
||||||
|
return m
|
||||||
}
|
}
|
||||||
|
124
data.go
124
data.go
@ -10,6 +10,7 @@ type Contacts struct {
|
|||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
Address string `json:"address"`
|
Address string `json:"address"`
|
||||||
Icon string `json:"icon"`
|
Icon string `json:"icon"`
|
||||||
|
Image string `json:"image"`
|
||||||
} `json:"contacts"`
|
} `json:"contacts"`
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,6 +57,15 @@ type AutoGen struct {
|
|||||||
} `json:"about"`
|
} `json:"about"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Tags struct {
|
||||||
|
Tags []struct {
|
||||||
|
ID string `json:"id"`
|
||||||
|
Text string `json:"text"`
|
||||||
|
Count int `json:"count"`
|
||||||
|
PmCount int `json:"pm_count"`
|
||||||
|
} `json:"tags"`
|
||||||
|
}
|
||||||
|
|
||||||
// TagTopics list of topics via tag
|
// TagTopics list of topics via tag
|
||||||
type TagTopics struct {
|
type TagTopics struct {
|
||||||
TopicList struct {
|
TopicList struct {
|
||||||
@ -65,18 +75,23 @@ type TagTopics struct {
|
|||||||
} `json:"topic_list"`
|
} `json:"topic_list"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type TopicsList struct {
|
||||||
|
Topic []Topic
|
||||||
|
}
|
||||||
|
|
||||||
// Topic data
|
// Topic data
|
||||||
type Topic struct {
|
type Topic struct {
|
||||||
PostStream struct {
|
PostStream struct {
|
||||||
Posts []struct {
|
Posts []struct {
|
||||||
Cooked string `json:"cooked"`
|
Cooked string `json:"cooked"`
|
||||||
UserTitle string `json:"user_title"`
|
UserTitle string `json:"user_title"`
|
||||||
|
PostNumber int `json:"post_number"`
|
||||||
} `json:"posts"`
|
} `json:"posts"`
|
||||||
} `json:"post_stream"`
|
} `json:"post_stream"`
|
||||||
Tags []string `json:"tags"`
|
Tags []string `json:"tags"`
|
||||||
ID int `json:"id"`
|
ID int `json:"id"`
|
||||||
Title string `json:"title"`
|
Title string `json:"title"`
|
||||||
CreatedAt time.Time `json:"created_at"`
|
CreatedAt string `json:"created_at"`
|
||||||
Slug string `json:"slug"`
|
Slug string `json:"slug"`
|
||||||
Details struct {
|
Details struct {
|
||||||
CreatedBy struct {
|
CreatedBy struct {
|
||||||
@ -87,3 +102,110 @@ type Topic struct {
|
|||||||
} `json:"created_by"`
|
} `json:"created_by"`
|
||||||
} `json:"details"`
|
} `json:"details"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Categories struct {
|
||||||
|
CategoryList struct {
|
||||||
|
CanCreateCategory bool `json:"can_create_category"`
|
||||||
|
CanCreateTopic bool `json:"can_create_topic"`
|
||||||
|
Draft interface{} `json:"draft"`
|
||||||
|
DraftKey string `json:"draft_key"`
|
||||||
|
DraftSequence int `json:"draft_sequence"`
|
||||||
|
Categories []struct {
|
||||||
|
ID int `json:"id"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
Color string `json:"color"`
|
||||||
|
TextColor string `json:"text_color"`
|
||||||
|
Slug string `json:"slug"`
|
||||||
|
TopicCount int `json:"topic_count"`
|
||||||
|
PostCount int `json:"post_count"`
|
||||||
|
Position int `json:"position"`
|
||||||
|
Description string `json:"description"`
|
||||||
|
DescriptionText string `json:"description_text"`
|
||||||
|
TopicURL string `json:"topic_url"`
|
||||||
|
ReadRestricted bool `json:"read_restricted"`
|
||||||
|
Permission int `json:"permission"`
|
||||||
|
NotificationLevel int `json:"notification_level"`
|
||||||
|
CanEdit bool `json:"can_edit"`
|
||||||
|
TopicTemplate string `json:"topic_template"`
|
||||||
|
HasChildren bool `json:"has_children"`
|
||||||
|
SortOrder string `json:"sort_order"`
|
||||||
|
SortAscending interface{} `json:"sort_ascending"`
|
||||||
|
ShowSubcategoryList bool `json:"show_subcategory_list"`
|
||||||
|
NumFeaturedTopics int `json:"num_featured_topics"`
|
||||||
|
DefaultView string `json:"default_view"`
|
||||||
|
SubcategoryListStyle string `json:"subcategory_list_style"`
|
||||||
|
DefaultTopPeriod string `json:"default_top_period"`
|
||||||
|
MinimumRequiredTags int `json:"minimum_required_tags"`
|
||||||
|
NavigateToFirstPostAfterRead bool `json:"navigate_to_first_post_after_read"`
|
||||||
|
TopicsDay int `json:"topics_day"`
|
||||||
|
TopicsWeek int `json:"topics_week"`
|
||||||
|
TopicsMonth int `json:"topics_month"`
|
||||||
|
TopicsYear int `json:"topics_year"`
|
||||||
|
TopicsAllTime int `json:"topics_all_time"`
|
||||||
|
DescriptionExcerpt string `json:"description_excerpt"`
|
||||||
|
UploadedLogo interface{} `json:"uploaded_logo"`
|
||||||
|
UploadedBackground interface{} `json:"uploaded_background"`
|
||||||
|
SubcategoryIds []int `json:"subcategory_ids,omitempty"`
|
||||||
|
} `json:"categories"`
|
||||||
|
} `json:"category_list"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type CategoryTopics struct {
|
||||||
|
Users []struct {
|
||||||
|
ID int `json:"id"`
|
||||||
|
Username string `json:"username"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
AvatarTemplate string `json:"avatar_template"`
|
||||||
|
} `json:"users"`
|
||||||
|
PrimaryGroups []interface{} `json:"primary_groups"`
|
||||||
|
TopicList struct {
|
||||||
|
CanCreateTopic bool `json:"can_create_topic"`
|
||||||
|
Draft interface{} `json:"draft"`
|
||||||
|
DraftKey string `json:"draft_key"`
|
||||||
|
DraftSequence int `json:"draft_sequence"`
|
||||||
|
PerPage int `json:"per_page"`
|
||||||
|
TopTags []string `json:"top_tags"`
|
||||||
|
Topics []struct {
|
||||||
|
ID int `json:"id"`
|
||||||
|
Title string `json:"title"`
|
||||||
|
FancyTitle string `json:"fancy_title"`
|
||||||
|
Slug string `json:"slug"`
|
||||||
|
PostsCount int `json:"posts_count"`
|
||||||
|
ReplyCount int `json:"reply_count"`
|
||||||
|
HighestPostNumber int `json:"highest_post_number"`
|
||||||
|
ImageURL interface{} `json:"image_url"`
|
||||||
|
CreatedAt time.Time `json:"created_at"`
|
||||||
|
LastPostedAt time.Time `json:"last_posted_at"`
|
||||||
|
Bumped bool `json:"bumped"`
|
||||||
|
BumpedAt time.Time `json:"bumped_at"`
|
||||||
|
Unseen bool `json:"unseen"`
|
||||||
|
LastReadPostNumber int `json:"last_read_post_number"`
|
||||||
|
Unread int `json:"unread"`
|
||||||
|
NewPosts int `json:"new_posts"`
|
||||||
|
Pinned bool `json:"pinned"`
|
||||||
|
Unpinned bool `json:"unpinned"`
|
||||||
|
Visible bool `json:"visible"`
|
||||||
|
Closed bool `json:"closed"`
|
||||||
|
Archived bool `json:"archived"`
|
||||||
|
NotificationLevel int `json:"notification_level"`
|
||||||
|
Bookmarked bool `json:"bookmarked"`
|
||||||
|
Liked bool `json:"liked"`
|
||||||
|
Tags []interface{} `json:"tags"`
|
||||||
|
Views int `json:"views"`
|
||||||
|
LikeCount int `json:"like_count"`
|
||||||
|
HasSummary bool `json:"has_summary"`
|
||||||
|
Archetype string `json:"archetype"`
|
||||||
|
LastPosterUsername string `json:"last_poster_username"`
|
||||||
|
CategoryID int `json:"category_id"`
|
||||||
|
PinnedGlobally bool `json:"pinned_globally"`
|
||||||
|
FeaturedLink interface{} `json:"featured_link"`
|
||||||
|
Posters []struct {
|
||||||
|
Extras interface{} `json:"extras"`
|
||||||
|
Description string `json:"description"`
|
||||||
|
UserID int `json:"user_id"`
|
||||||
|
PrimaryGroupID interface{} `json:"primary_group_id"`
|
||||||
|
} `json:"posters"`
|
||||||
|
BookmarkedPostNumbers []int `json:"bookmarked_post_numbers,omitempty"`
|
||||||
|
} `json:"topics"`
|
||||||
|
} `json:"topic_list"`
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user