From c2d455fa28c7f8a896d6e75db262ab6e52ad49db Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Tue, 16 Aug 2022 08:03:35 -0400 Subject: [PATCH] Remove Go version, add Rust version, improve README --- .gitignore | 4 ++ Cargo.toml | 13 ++++ README.md | 7 ++- misc/img.webp | Bin 0 -> 32468 bytes src/go.mod | 25 -------- src/go.sum | 73 ----------------------- src/main.go | 161 -------------------------------------------------- src/main.rs | 69 ++++++++++++++++++++++ 8 files changed, 90 insertions(+), 262 deletions(-) create mode 100644 .gitignore create mode 100644 Cargo.toml create mode 100644 misc/img.webp delete mode 100644 src/go.mod delete mode 100644 src/go.sum delete mode 100644 src/main.go create mode 100644 src/main.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d04c87b --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +/target/ +/Cargo.lock +/.idea/ +/items.xml diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..2284c79 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "amirss" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +reqwest = { version = "0.11", features = ["blocking", "json"] } +serde_json = "1.0" +serde = { version = "1.0", features = ["derive"] } +rss = "2.0" +build_html = "2.1.1" \ No newline at end of file diff --git a/README.md b/README.md index 1756bf6..04f408f 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,8 @@ # amiamirss -This is a simple AmiAmi scraper used to generate a RSS feed. It's too basic at the moment and doesn't keep track of any state. +An AmiAmi scraper, which can generate an RSS feed of new items. -## Licensing +![screenshot of rss feed](misc/img.webp) -This is originally based off of https://github.com/awused/rss-scrapers but modified to instead read the "New Items" page instead of a specific search page. +Right now it's incredibly basic, and can only track one category of items (bishoujo). However, it's already a huge +improvement over their really slow and unnecessarily dynamic website. \ No newline at end of file diff --git a/misc/img.webp b/misc/img.webp new file mode 100644 index 0000000000000000000000000000000000000000..3ba56eb88ead985f28e3a2d8cae6d660049a9538 GIT binary patch literal 32468 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%0AQOB7_0J`VY0E#Y~-fN>yaDReP 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 literal 0 HcmV?d00001 diff --git a/src/go.mod b/src/go.mod deleted file mode 100644 index bf4cf51..0000000 --- a/src/go.mod +++ /dev/null @@ -1,25 +0,0 @@ -module git.sr.ht/~redstrate/amiamirss - -go 1.12 - -require ( - github.com/PuerkitoBio/goquery v1.7.0 // indirect - github.com/andybalholm/cascadia v1.2.0 // indirect - github.com/antchfx/htmlquery v1.2.3 - github.com/antchfx/xpath v1.2.0 // indirect - github.com/awused/awconf v0.0.0-20210616091321-7189f311cc83 - github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/snappy v0.0.4 // indirect - github.com/gorilla/feeds v1.1.1 - github.com/json-iterator/go v1.1.11 // indirect - github.com/kr/pretty v0.2.0 // indirect - github.com/mmcdole/gofeed v1.1.3 - github.com/mmcdole/goxpp v0.0.0-20200921145534-2f3784f67354 // indirect - github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.1 // indirect - github.com/sirupsen/logrus v1.8.1 - github.com/stretchr/testify v1.5.1 // indirect - github.com/syndtr/goleveldb v1.0.0 - golang.org/x/net v0.0.0-20210614182718-04defd469f4e // indirect - golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c // indirect -) diff --git a/src/go.sum b/src/go.sum deleted file mode 100644 index d81fb1a..0000000 --- a/src/go.sum +++ /dev/null @@ -1,73 +0,0 @@ -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= -github.com/PuerkitoBio/goquery v1.7.0 h1:O5SP3b9JWqMSVMG69zMfj577zwkSNpxrFf7ybS74eiw= -github.com/PuerkitoBio/goquery v1.7.0/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= -github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= -github.com/andybalholm/cascadia v1.2.0/go.mod h1:YCyR8vOZT9aZ1CHEd8ap0gMVm2aFgxBp0T0eFw1RUQY= -github.com/antchfx/htmlquery v1.2.3/go.mod h1:B0ABL+F5irhhMWg54ymEZinzMSi0Kt3I2if0BLYa3V0= -github.com/antchfx/xpath v1.1.6/go.mod h1:Yee4kTMuNiPYJ7nSNorELQMr1J33uOpXDMByNYhvtNk= -github.com/antchfx/xpath v1.2.0/go.mod h1:i54GszH55fYfBmoZXapTHN8T8tkcHfRgLyVwwqzXNcs= -github.com/awused/awconf v0.0.0-20210616091321-7189f311cc83/go.mod h1:UwjeQegPaE0Qr4GaOWPba94Fq+diIcArNMw5eMmZi8M= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/gorilla/feeds v1.1.1 h1:HwKXxqzcRNg9to+BbvJog4+f3s/xzvtZXICcQGutYfY= -github.com/gorilla/feeds v1.1.1/go.mod h1:Nk0jZrvPFZX1OBe5NPiddPw7CfwF6Q9eqzaBbaightA= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/mmcdole/gofeed v1.1.3/go.mod h1:QQO3maftbOu+hiVOGOZDRLymqGQCos4zxbA4j89gMrE= -github.com/mmcdole/goxpp v0.0.0-20181012175147-0068e33feabf/go.mod h1:pasqhqstspkosTneA62Nc+2p9SOBBYAPbnmRRWPQ0V8= -github.com/mmcdole/goxpp v0.0.0-20200921145534-2f3784f67354/go.mod h1:pasqhqstspkosTneA62Nc+2p9SOBBYAPbnmRRWPQ0V8= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= -github.com/urfave/cli v1.22.3/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/src/main.go b/src/main.go deleted file mode 100644 index 89bb91d..0000000 --- a/src/main.go +++ /dev/null @@ -1,161 +0,0 @@ - -package main - -import ( - "encoding/json" - "encoding/xml" - "fmt" - "io/ioutil" - "log" - "net/http" - "time" - - "github.com/gorilla/feeds" -) - -const searchURL = "https://api.amiami.com/api/v1.0/items?pagemax=50&lang=eng&s_st_list_preorder_available=1&s_st_list_newitem_available=1&s_cate_tag=1" - -const itemURLPrefix = "https://www.amiami.com/eng/detail/?gcode=" - -func main() { - req, err := http.NewRequest("GET", searchURL, nil) - if err != nil { - log.Panic(err) - } - - req.Header.Add("X-User-Key", "amiami_dev") - - resp, err := http.DefaultClient.Do(req) - if err != nil { - log.Panic(err) - } - defer resp.Body.Close() - - body, err := ioutil.ReadAll(resp.Body) - resp.Body.Close() - if err != nil { - log.Panic(err) - } - - var b response - err = json.Unmarshal(body, &b) - if err != nil { - log.Panic(err) - } - if !b.RSuccess { - log.Panic("AmiAmi search failure " + b.RMessage) - } - - feed := &feeds.Rss{&feeds.Feed{ - Title: "AmiAmi - New items", - Link: &feeds.Link{Href: searchURL}, - Description: "AmiAmi - New items", - }} - - now := time.Now() - - for _, p := range b.Items { - if p.OrderClosedFlg == 1 { - continue - } - - feed.Items = append(feed.Items, &feeds.Item{ - Title: p.Gname, - Id: p.Gcode, - Link: &feeds.Link{Href: itemURLPrefix + p.Gcode}, - Created: now, - }) - } - - rssFeed := feed.RssFeed() - // 1 hour TTL - rssFeed.Ttl = 60 - - feedXML, err := xml.Marshal(rssFeed.FeedXml()) - if err != nil { - log.Panic(err) - } - - fmt.Print(string(feedXML)) -} - -type response struct { - RSuccess bool `json:"RSuccess"` - RValue interface{} `json:"RValue"` - RMessage string `json:"RMessage"` - SearchResult struct { - TotalResults int `json:"total_results"` - } `json:"search_result"` - Items []struct { - Gcode string `json:"gcode"` - Gname string `json:"gname"` - ThumbURL string `json:"thumb_url"` - ThumbAlt string `json:"thumb_alt"` - ThumbTitle string `json:"thumb_title"` - MinPrice int `json:"min_price"` - MaxPrice int `json:"max_price"` - CPriceTaxed int `json:"c_price_taxed"` - MakerName string `json:"maker_name"` - Saleitem int `json:"saleitem"` - ConditionFlg int `json:"condition_flg"` - ListPreorderAvailable int `json:"list_preorder_available"` - ListBackorderAvailable int `json:"list_backorder_available"` - ListStoreBonus int `json:"list_store_bonus"` - ListAmiamiLimited int `json:"list_amiami_limited"` - InstockFlg int `json:"instock_flg"` - OrderClosedFlg int `json:"order_closed_flg"` - ElementID interface{} `json:"element_id"` - Salestatus string `json:"salestatus"` - SalestatusDetail string `json:"salestatus_detail"` - Releasedate string `json:"releasedate"` - Jancode string `json:"jancode"` - Preorderitem int `json:"preorderitem"` - Saletopitem int `json:"saletopitem"` - ResaleFlg int `json:"resale_flg"` - PreownedSaleFlg interface{} `json:"preowned_sale_flg"` - ForWomenFlg int `json:"for_women_flg"` - GenreMoe int `json:"genre_moe"` - Cate6 interface{} `json:"cate6"` - Cate7 interface{} `json:"cate7"` - BuyFlg int `json:"buy_flg"` - BuyPrice int `json:"buy_price"` - BuyRemarks interface{} `json:"buy_remarks"` - StockFlg int `json:"stock_flg"` - ImageOn int `json:"image_on"` - ImageCategory string `json:"image_category"` - ImageName string `json:"image_name"` - Metaalt interface{} `json:"metaalt"` - } `json:"items"` - Embedded struct { - CategoryTags []struct { - ID int `json:"id"` - Name string `json:"name"` - Count int `json:"count"` - } `json:"category_tags"` - Makers []struct { - ID int `json:"id"` - Name string `json:"name"` - Count int `json:"count"` - } `json:"makers"` - SeriesTitles []struct { - ID int `json:"id"` - Name string `json:"name"` - Count int `json:"count"` - } `json:"series_titles"` - OriginalTitles []struct { - ID int `json:"id"` - Name string `json:"name"` - Count int `json:"count"` - } `json:"original_titles"` - CharacterNames []struct { - ID int `json:"id"` - Name string `json:"name"` - Count int `json:"count"` - } `json:"character_names"` - Elements []struct { - ID int `json:"id"` - Name string `json:"name"` - Count int `json:"count"` - } `json:"elements"` - } `json:"_embedded"` -} diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..a5fb846 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,69 @@ +use std::collections::HashMap; +use std::fmt::format; +use std::fs::write; +use std::io::Read; +use std::ops::Add; +use reqwest::header; +use serde::Deserialize; +use rss::{Channel, Item, Source}; +use rss::ChannelBuilder; +use rss::ItemBuilder; +use build_html::{self, Html, HtmlContainer}; + +#[derive(Debug, Deserialize)] +struct SearchItem { + gcode : String, + gname : String, + thumb_url : String, + maker_name : String, + + max_price : i32, + releasedate : String +} + +#[derive(Debug, Deserialize)] +struct SearchResponse { + items: Vec +} + +fn main() { + let mut headers = header::HeaderMap::new(); + headers.insert("X-User-Key", header::HeaderValue::from_static("amiami_dev")); + + let client = reqwest::blocking::Client::builder() + .default_headers(headers) + .build().unwrap(); + + let resp = client.get("https://api.amiami.com/api/v1.0/items?pagemax=50&lang=eng&s_st_list_preorder_available=1&s_st_list_newitem_available=1&s_cate_tag=14") + .send() + .unwrap() + .json::() + .unwrap(); + + let mut rss_items = Vec::::new(); + + for item in resp.items { + let mut rss_item = Item::default(); + rss_item.set_title(item.gname.clone()); + rss_item.set_author(item.maker_name.clone()); + rss_item.set_link(format!("https://www.amiami.com/eng/detail/?gcode={}", item.gcode)); + + let page = build_html::HtmlPage::new() + .with_image(format!("https://img.amiami.com{}", item.thumb_url), item.gname) + .with_paragraph(format!("{} JPY", item.max_price)) + .with_paragraph(format!("Release Date: {}", item.releasedate)) + .with_link(format!("https://www.amiami.com/eng/detail/?gcode={}", item.gcode), "Store Page") + .to_html_string(); + + rss_item.set_content(page.to_string()); + + rss_items.push(rss_item); + } + + let channel = ChannelBuilder::default() + .title("AmiAmi - New Items") + .items(rss_items) + .build(); + + write("items.xml", channel.to_string()); +}