func GetTitle(rawuri string) string { var index int ext := rawuri[strings.LastIndex(rawuri, "//")+2:] if index = strings.LastIndex(ext, "/"); index > 0 { ext = ext[index+1:] if index = strings.Index(ext, "."); index > -1 { ext = ext[index+1:] allow := []string{"htm", "html", "asp", "aspx", "php", "php3", "php5"} if !lib.HasElementString(allow, ext) { logger.Debug(fmt.Sprintf("[web.GetTitle()] Not an OK file extension: %s -> %s", rawuri, ext)) return "" } } } body, err := Get(&rawuri) if err != "" { return "" } r, regErr := regexp.Compile("<title?[^>]+>([^<]+)<\\/title>") if regErr != nil { logger.Error("[web.GetTitle()] Couldn't compile regex title regex") return "" } if title := r.FindString(string(body)); title != "" { rooturl := rawuri[strings.Index(rawuri, "//")+2:] if index = strings.Index(rooturl, "/"); index > -1 { rooturl = rooturl[:index] } return fmt.Sprintf("%s ~ %s", html.UnescapeString(lib.StripHtml(title)), rooturl) } return "" }
func checkUpdates(bot *irc.IRC, source string, context string) { var manga Manga var uri, message string var watched map[string]MangaEntry loadWatched(&manga) switch source { case "mangafox": uri = "http://mangafox.me/rss/latest_manga_chapters.xml" watched = manga.MangaFox case "mangastream": uri = "http://mangastream.com/rss" watched = manga.MangaStream } data, err := web.Get(&uri) if err != "" { logger.Error(err) return } var entries map[string]MangaEntry entries, perr := parseRSS(data, source) if perr != nil { logger.Error(perr.Error()) return } keys := getKeys(source) updates := make([]irc.RatedMessage, 0) var method string var newEntry MangaEntry for title, entry := range entries { for _, key := range keys { if strings.Index(title, key) > -1 { if entry.Date > watched[key].Date { // update found switch source { case "mangastream": message = fmt.Sprintf("%s is out! \\o/ ~ %s ~ %q", entry.Title, entry.Link, entry.Desc) newEntry = MangaEntry{ Manga: entry.Title[:len(key)], Title: entry.Title, Date: entry.Date, Desc: entry.Desc, Link: entry.Link, Announce: watched[key].Announce, } case "mangafox": message = fmt.Sprintf("%s is out! \\o/ ~ %s", entry.Title, entry.Link) newEntry = MangaEntry{ Manga: entry.Title[:len(key)], Title: entry.Title, Date: entry.Date, Link: entry.Link, Announce: watched[key].Announce, } } delete(watched, key) watched[key] = newEntry if context != "" && !lib.HasElementString(watched[key].Announce, context) { if context[0:1] == "#" { method = "say" } else { method = "notice" } updates = append(updates, irc.RatedMessage{ Method: method, Target: context, Message: message, }) } for _, target := range watched[key].Announce { if target[0:1] == "#" { method = "say" } else { method = "notice" } updates = append(updates, irc.RatedMessage{ Method: method, Target: target, Message: message, }) } } } } } if len(updates) > 0 { bot.Rated(&updates) saveWatched(&manga) } else if context != "" { bot.Say(context, "Nothing new. :\\") } }