diff --git a/go.mod b/go.mod index 38e5d43..d866adc 100644 --- a/go.mod +++ b/go.mod @@ -9,5 +9,5 @@ require ( golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4 humungus.tedunangst.com/r/go-sqlite3 v1.1.3 - humungus.tedunangst.com/r/webs v0.6.57 + humungus.tedunangst.com/r/webs v0.6.59 ) diff --git a/go.sum b/go.sum index d8925fb..1d7a565 100644 --- a/go.sum +++ b/go.sum @@ -25,5 +25,5 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= humungus.tedunangst.com/r/go-sqlite3 v1.1.3 h1:G2N4wzDS0NbuvrZtQJhh4F+3X+s7BF8b9ga8k38geUI= humungus.tedunangst.com/r/go-sqlite3 v1.1.3/go.mod h1:FtEEmQM7U2Ey1TuEEOyY1BmphTZnmiEjPsNLEAkpf/M= -humungus.tedunangst.com/r/webs v0.6.57 h1:HzYgzknJTL54KJKeRUwVvyYAsUSCHl+ImcMI0lIzan4= -humungus.tedunangst.com/r/webs v0.6.57/go.mod h1:03R0N9BcT49HB4TDd1YmarpbiPvPzVDm74Mk4h1hYPc= +humungus.tedunangst.com/r/webs v0.6.59 h1:zOlBGZqrRo22QND1CN8HbhEv3JwoiZkspi7TgVuJS0s= +humungus.tedunangst.com/r/webs v0.6.59/go.mod h1:03R0N9BcT49HB4TDd1YmarpbiPvPzVDm74Mk4h1hYPc= diff --git a/import.go b/import.go index 1b051c1..f455837 100644 --- a/import.go +++ b/import.go @@ -21,6 +21,7 @@ import ( "fmt" "html" "io/ioutil" + "log" "os" "regexp" "sort" @@ -223,26 +224,118 @@ func importTwitter(username, source string) { } type Tweet struct { - ID_str string - Created_at string - Full_text string - In_reply_to_screen_name string - In_reply_to_status_id string - Entities struct { - Hashtags []struct { - Text string - } - Media []struct { - Url string - Media_url string - } - Urls []struct { - Url string - Expanded_url string - } - } date time.Time convoy string + Tweet struct { + CreatedAt string `json:"created_at"` + DisplayTextRange []string `json:"display_text_range"` + EditInfo struct { + Initial struct { + EditTweetIds []string `json:"editTweetIds"` + EditableUntil string `json:"editableUntil"` + EditsRemaining string `json:"editsRemaining"` + IsEditEligible bool `json:"isEditEligible"` + } `json:"initial"` + } `json:"edit_info"` + Entities struct { + Hashtags []struct { + Indices []string `json:"indices"` + Text string `json:"text"` + } `json:"hashtags"` + Media []struct { + DisplayURL string `json:"display_url"` + ExpandedURL string `json:"expanded_url"` + ID string `json:"id"` + IdStr string `json:"id_str"` + Indices []string `json:"indices"` + MediaURL string `json:"media_url"` + MediaUrlHttps string `json:"media_url_https"` + Sizes struct { + Large struct { + H string `json:"h"` + Resize string `json:"resize"` + W string `json:"w"` + } `json:"large"` + Medium struct { + H string `json:"h"` + Resize string `json:"resize"` + W string `json:"w"` + } `json:"medium"` + Small struct { + H string `json:"h"` + Resize string `json:"resize"` + W string `json:"w"` + } `json:"small"` + Thumb struct { + H string `json:"h"` + Resize string `json:"resize"` + W string `json:"w"` + } `json:"thumb"` + } `json:"sizes"` + Type string `json:"type"` + URL string `json:"url"` + } `json:"media"` + Symbols []interface{} `json:"symbols"` + Urls []struct { + DisplayURL string `json:"display_url"` + ExpandedURL string `json:"expanded_url"` + Indices []string `json:"indices"` + URL string `json:"url"` + } `json:"urls"` + UserMentions []interface{} `json:"user_mentions"` + } `json:"entities"` + ExtendedEntities struct { + Media []struct { + DisplayURL string `json:"display_url"` + ExpandedURL string `json:"expanded_url"` + ID string `json:"id"` + IdStr string `json:"id_str"` + Indices []string `json:"indices"` + MediaURL string `json:"media_url"` + MediaUrlHttps string `json:"media_url_https"` + Sizes struct { + Large struct { + H string `json:"h"` + Resize string `json:"resize"` + W string `json:"w"` + } `json:"large"` + Medium struct { + H string `json:"h"` + Resize string `json:"resize"` + W string `json:"w"` + } `json:"medium"` + Small struct { + H string `json:"h"` + Resize string `json:"resize"` + W string `json:"w"` + } `json:"small"` + Thumb struct { + H string `json:"h"` + Resize string `json:"resize"` + W string `json:"w"` + } `json:"thumb"` + } `json:"sizes"` + Type string `json:"type"` + URL string `json:"url"` + } `json:"media"` + } `json:"extended_entities"` + FavoriteCount string `json:"favorite_count"` + Favorited bool `json:"favorited"` + FullText string `json:"full_text"` + ID string `json:"id"` + IdStr string `json:"id_str"` + InReplyToScreenName string `json:"in_reply_to_screen_name"` + InReplyToStatusID string `json:"in_reply_to_status_id"` + InReplyToStatusIdStr string `json:"in_reply_to_status_id_str"` + InReplyToUserID string `json:"in_reply_to_user_id"` + InReplyToUserIdStr string `json:"in_reply_to_user_id_str"` + Lang string `json:"lang"` + PossiblySensitive bool `json:"possibly_sensitive"` + RetweetCount string `json:"retweet_count"` + Retweeted bool `json:"retweeted"` + Source string `json:"source"` + Truncated bool `json:"truncated"` + } `json:"tweet"` } var tweets []*Tweet @@ -260,8 +353,8 @@ func importTwitter(username, source string) { fd.Close() tweetmap := make(map[string]*Tweet) for _, t := range tweets { - t.date, _ = time.Parse("Mon Jan 02 15:04:05 -0700 2006", t.Created_at) - tweetmap[t.ID_str] = t + t.date, _ = time.Parse("Mon Jan 02 15:04:05 -0700 2006", t.Tweet.CreatedAt) + tweetmap[t.Tweet.IdStr] = t } sort.Slice(tweets, func(i, j int) bool { return tweets[i].date.Before(tweets[j].date) @@ -271,26 +364,33 @@ func importTwitter(username, source string) { row := stmtFindXonk.QueryRow(user.ID, xid) err := row.Scan(&id) if err == nil { + log.Printf("id = %v", id) return true } return false } - + log.Printf("importing %v tweets", len(tweets)) for _, t := range tweets { - xid := fmt.Sprintf("%s/%s/%s", user.URL, honkSep, t.ID_str) + xid := fmt.Sprintf("%s/%s/%s", user.URL, honkSep, t.Tweet.IdStr) if havetwid(xid) { continue } + + if t.Tweet.FavoriteCount == "0" || t.Tweet.FavoriteCount == "" { + log.Printf("skipping, unworthy tweet") + continue + } + what := "honk" noise := "" - if parent := tweetmap[t.In_reply_to_status_id]; parent != nil { + if parent := tweetmap[t.Tweet.InReplyToStatusID]; parent != nil { t.convoy = parent.convoy what = "tonk" } else { - t.convoy = "data:,acoustichonkytonk-" + t.ID_str - if t.In_reply_to_screen_name != "" { + t.convoy = "data:,acoustichonkytonk-" + t.Tweet.IdStr + if t.Tweet.InReplyToScreenName != "" { noise = fmt.Sprintf("re: https://twitter.com/%s/status/%s\n\n", - t.In_reply_to_screen_name, t.In_reply_to_status_id) + t.Tweet.InReplyToScreenName, t.Tweet.InReplyToStatusID) what = "tonk" } } @@ -308,17 +408,17 @@ func importTwitter(username, source string) { Public: true, Whofore: 2, } - noise += t.Full_text + noise += t.Tweet.FullText // unbelievable noise = html.UnescapeString(noise) - for _, r := range t.Entities.Urls { - noise = strings.Replace(noise, r.Url, r.Expanded_url, -1) + for _, r := range t.Tweet.Entities.Urls { + noise = strings.Replace(noise, r.URL, r.ExpandedURL, -1) } - for _, m := range t.Entities.Media { - u := m.Media_url + for _, m := range t.Tweet.Entities.Media { + u := m.MediaURL idx := strings.LastIndexByte(u, '/') u = u[idx+1:] - fname := fmt.Sprintf("%s/tweet_media/%s-%s", source, t.ID_str, u) + fname := fmt.Sprintf("%s/tweets_media/%s-%s", source, t.Tweet.IdStr, u) data, err := ioutil.ReadFile(fname) if err != nil { elog.Printf("error reading media: %s", fname) @@ -335,12 +435,13 @@ func importTwitter(username, source string) { FileID: fileid, } honk.Donks = append(honk.Donks, donk) - noise = strings.Replace(noise, m.Url, "", -1) + noise = strings.Replace(noise, m.URL, "", -1) } - for _, ht := range t.Entities.Hashtags { + for _, ht := range t.Tweet.Entities.Hashtags { honk.Onts = append(honk.Onts, "#"+ht.Text) } honk.Noise = noise - savehonk(&honk) + err := savehonk(&honk) + log.Printf("honk saved %v -> %v", xid, err) } } diff --git a/views/honk.html b/views/honk.html index 4783eb2..6fa0040 100644 --- a/views/honk.html +++ b/views/honk.html @@ -11,7 +11,7 @@ {{ end }} -{{ if $bonkcsrf }} {{ end }} + {{ if .Oonker }} {{ if $bonkcsrf }} @@ -19,7 +19,7 @@ {{ end }} -{{ if $bonkcsrf }} {{ end }} + {{ end }}

{{ if $bonkcsrf }} @@ -52,7 +52,7 @@ in reply to: {{ .RID }}

-{{ .HTPrecis }}

+{{ .HTPrecis }}

{{ .HTPrecis }}

{{ .HTML }} {{ with .Time }} diff --git a/web.go b/web.go index 704e5f8..03f745a 100644 --- a/web.go +++ b/web.go @@ -2464,7 +2464,7 @@ func bgmonitor() { func serve() { db := opendatabase() - login.Init(login.InitArgs{Db: db, Logger: ilog, Insecure: develMode}) + login.Init(login.InitArgs{Db: db, Logger: ilog, Insecure: develMode, SameSiteStrict: !develMode}) listener, err := openListener() if err != nil {