@@ -73,25 +73,20 @@ func (feed *Feed) Tags(tag string) (*FeedTag, error) {
73
73
if err != nil {
74
74
return nil , err
75
75
}
76
- for i := range res .RankedItems {
77
- res .RankedItems [i ].media = & FeedMedia {
78
- inst : insta ,
79
- NextID : res .RankedItems [i ].ID ,
80
- }
81
- }
82
-
83
- for i := range res .Images {
84
- res .Images [i ].media = & FeedMedia {
85
- inst : insta ,
86
- NextID : res .Images [i ].ID ,
87
- }
88
- }
76
+ res .name = tag
77
+ res .inst = feed .inst
78
+ res .setValues ()
89
79
90
80
return res , nil
91
81
}
92
82
93
83
// FeedTag is the struct that fits the structure returned by instagram on TagSearch.
94
84
type FeedTag struct {
85
+ inst * Instagram
86
+ err error
87
+
88
+ name string
89
+
95
90
RankedItems []Item `json:"ranked_items"`
96
91
Images []Item `json:"items"`
97
92
NumResults int `json:"num_results"`
@@ -101,3 +96,59 @@ type FeedTag struct {
101
96
Story StoryMedia `json:"story"`
102
97
Status string `json:"status"`
103
98
}
99
+
100
+ func (ft * FeedTag ) setValues () {
101
+ for i := range ft .RankedItems {
102
+ ft .RankedItems [i ].media = & FeedMedia {
103
+ inst : ft .inst ,
104
+ NextID : ft .RankedItems [i ].ID ,
105
+ }
106
+ }
107
+
108
+ for i := range ft .Images {
109
+ ft .Images [i ].media = & FeedMedia {
110
+ inst : ft .inst ,
111
+ NextID : ft .Images [i ].ID ,
112
+ }
113
+ }
114
+ }
115
+
116
+ // Next paginates over hashtag feed.
117
+ func (ft * FeedTag ) Next () bool {
118
+ if ft .err != nil {
119
+ return false
120
+ }
121
+
122
+ insta := ft .inst
123
+ name := ft .name
124
+ body , err := insta .sendRequest (
125
+ & reqOptions {
126
+ Query : map [string ]string {
127
+ "max_id" : ft .NextID ,
128
+ "rank_token" : insta .rankToken ,
129
+ },
130
+ Endpoint : fmt .Sprintf (urlFeedTag , name ),
131
+ },
132
+ )
133
+ if err == nil {
134
+ newFT := FeedTag {}
135
+ err = json .Unmarshal (body , & newFT )
136
+ if err == nil {
137
+ * ft = newFT
138
+ ft .inst = insta
139
+ ft .name = name
140
+ if ! ft .MoreAvailable {
141
+ ft .err = ErrNoMore
142
+ }
143
+ ft .setValues ()
144
+ return true
145
+ }
146
+ }
147
+ ft .err = err
148
+ return false
149
+ }
150
+
151
+ //Error returns hashtag error
152
+ func (ft * FeedTag ) Error () error {
153
+ return ft .err
154
+ }
0 commit comments