From 293413c4adf4ceca3eb7c4ce0fec8c49c7522fba Mon Sep 17 00:00:00 2001 From: Blake Wehrle Date: Tue, 31 Oct 2023 15:23:55 -0400 Subject: [PATCH 1/6] adding files from my blakekwehrle repo --- apps/runescape/manifest.yaml | 8 +++ apps/runescape/runescape.star | 96 +++++++++++++++++++++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 apps/runescape/manifest.yaml create mode 100644 apps/runescape/runescape.star diff --git a/apps/runescape/manifest.yaml b/apps/runescape/manifest.yaml new file mode 100644 index 0000000000..4d51333a0c --- /dev/null +++ b/apps/runescape/manifest.yaml @@ -0,0 +1,8 @@ +--- +id: runescape +name: OSRS Runescape Grand Exchange +summary: Shows item information from OSRS Runescape's Grand Exchange +desc: Shows item information from OSRS Runescape using the Runescape API. +author: blakekwehrle +fileName: runescape.star +packageName: runescape \ No newline at end of file diff --git a/apps/runescape/runescape.star b/apps/runescape/runescape.star new file mode 100644 index 0000000000..c7c4021441 --- /dev/null +++ b/apps/runescape/runescape.star @@ -0,0 +1,96 @@ +load("cache.star", "cache") +load("encoding/base64.star", "base64") +load("encoding/json.star", "json") +load("http.star", "http") +load("random.star", "random") +load("render.star", "render") +load("schema.star", "schema") + +CACHE_TTL_SECONDS = 36604800 # 7 days in seconds. +RUNESCAPEAPI_ITEMLIST_URL = "https://secure.runescape.com/m=itemdb_oldschool/api/catalogue/items.json?category=1&alpha={0}&page={1}" +PAGE_LENGTH_BY_LETTER = { 'a': 30, 'b': 40, 'c': 16, 'd': 20, 'e': 11, 'f': 8, 'g': 18, 'h': 5, + 'i': 10, 'j': 4, 'k': 4, 'l': 7, 'm': 25, 'n': 3, 'o': 9, 'p': 13, + 'r': 25, 's': 44, 't': 22, 'u': 5, 'v': 5, 'w': 11, 'x': 1, 'y': 3, 'z': 5} + +UP_CARROT_ICON = base64.decode("""R0lGODdhBgAFAHcAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFQAAAACwAAAAABgAFAIEAAABZwTXW8mQAAAACCQRkJoEX35KMBQAh+QQJQAAAACwAAAAABgAFAIEAAABZwTXW8mQAAAACCQRkJoEX35KMBQAh+QQFQAAAACwAAAAABgAFAIEAAABZwTXW8mQAAAACCoQiYMGp/5w6rgAAIfkECUAAAAAsAAAAAAYABQCBAAAAWcE11vJkAAAAAgqEImDBqf+cOq4AACH5BAVAAAAALAAAAAAGAAUAgQAAAFnBNdbyZAAAAAIJVC6gu9nhDAIFACH5BAlAAAAALAAAAAAGAAUAgQAAAFnBNdbyZAAAAAIJVC6gu9nhDAIFACH5BAVAAAAALAAAAAAGAAUAgQAAAFnBNdbyZAAAAAIJhG+CEgocGjoFACH5BAlAAAAALAAAAAAGAAUAgQAAAFnBNdbyZAAAAAIJhG+CEgocGjoFADs=""") +DOWN_CARROT_ICON = base64.decode("""R0lGODdhBgAFAHcAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFBQAAACwAAAAABgAFAIEAAADuCwv4cHAAAAACCIQvoWLJeKIpACH5BAkFAAAALAAAAAAGAAUAgQAAAO4LC/hwcAAAAAIIhC+hYsl4oikAIfkEBQUAAAAsAAAAAAYABQCBAAAA7gsL+HBwAAAAAgkEZKkSjReekQUAIfkECQUAAAAsAAAAAAYABQCBAAAA7gsL+HBwAAAAAgkEZKkSjReekQUAIfkEBQUAAAAsAAAAAAYABQCBAAAA7gsL+HBwAAAAAgqEIqC2rRfQk6AAACH5BAkFAAAALAAAAAAGAAUAgQAAAO4LC/hwcAAAAAIKhCKgtq0X0JOgAAAh+QQFBQAAACwAAAAABgAFAIEAAADuCwv4cHAAAAACClQuAJa6DpVBoAAAIfkECQUAAAAsAAAAAAYABQCBAAAA7gsL+HBwAAAAAgpULgCWug6VQaAAADs=""") +LINE_ICON = base64.decode("""R0lGODdhBgAFAHcAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFCgAAACwAAAAABgAFAIAAAABw2O4CCIQPoRbXCE8BACH5BAkKAAAALAAAAAAGAAUAgAAAAHDY7gIIhA+hFtcITwEAIfkEBQoAAAAsAAAAAAYABQCAAAAAcNjuAgeEb6Gw6F8AACH5BAkKAAAALAAAAAAGAAUAgAAAAHDY7gIHhG+hsOhfAAAh+QQFCgAAACwAAAAABgAFAIAAAABw2O4CB4R/EaaJbwoAIfkECQoAAAAsAAAAAAYABQCAAAAAcNjuAgeEfxGmiW8KACH5BAUKAAAALAAAAAAGAAUAgAAAAHDY7gIIhI9xocAIQQEAIfkECQoAAAAsAAAAAAYABQCAAAAAcNjuAgiEj3GhwAhBAQAh+QQFCgAAACwAAAAABgAFAIAAAABw2O4CB4SPGQHLeQoAIfkECQoAAAAsAAAAAAYABQCAAAAAcNjuAgeEjxkBy3kKACH5BAUKAAAALAAAAAAGAAUAgAAAAHDY7gIIhI8WtxCfTgEAIfkECQoAAAAsAAAAAAYABQCAAAAAcNjuAgiEjxa3EJ9OAQAh+QQFCgAAACwAAAAABgAFAIAAAABw2O4CB4SPFpGw3AoAIfkECQoAAAAsAAAAAAYABQCAAAAAcNjuAgeEjxaRsNwKACH5BAUKAAAALAAAAAAGAAUAgAAAAHDY7gIHhB+HqRDcCgAh+QQJCgAAACwAAAAABgAFAIAAAABw2O4CB4Qfh6kQ3AoAIfkEBQoAAAAsAAAAAAYABQCAAAAAcNjuAgeEH3GoC+0KACH5BAkKAAAALAAAAAAGAAUAgAAAAHDY7gIHhB9xqAvtCgAh+QQFCgAAACwAAAAABgAFAIAAAABw2O4CB4QfeRjrWwAAIfkECQoAAAAsAAAAAAYABQCAAAAAcNjuAgeEH3kY61sAADs=""") + +def main(): + random_letter = 'abcdefghijklmnoprstuvwxyz'[pick_letter()] + item_list = get_item_list(random_letter) + number_of_items = len(item_list["items"]) + random_item_index = random.number(0, number_of_items-1) + item_name = item_list["items"][random_item_index]["name"] + item_trend = item_list["items"][random_item_index]["today"]["trend"] + item_price = str(item_list["items"][random_item_index]["current"]["price"]) + " gp" + sprite_url = item_list["items"][random_item_index]["icon"] + sprite = get_cachable_data(sprite_url) + if(item_trend == "positive"): + selected_image = UP_CARROT_ICON + elif(item_trend == "neutral"): + selected_image = DOWN_CARROT_ICON + else: + selected_image = LINE_ICON + return render.Root( + child = render.Stack( + children = [ + render.Row( + children = [ + render.Box(width = 32), + render.Box(render.Image(sprite)), + ], + ), + render.Column( + children = [ + render.WrappedText ( + content=item_name, + width=64, + font="tom-thumb", + ), + render.Row( + main_align = "space_between", + cross_align = "center", + children = [ + render.Image(src=selected_image), + render.WrappedText ( + content=item_price, + width=64, + font="tom-thumb", + ), + ], + ) + ], + ), + ], + ), + ) + +def pick_letter(): + random_page_index = random.number(0, 344) + mySum = 0 + for index, pageCount in enumerate(PAGE_LENGTH_BY_LETTER.values()): + if random_page_index < mySum: + return index + else: + mySum += pageCount + +def get_item_list(letter): + url = RUNESCAPEAPI_ITEMLIST_URL.format(letter, random.number(0, PAGE_LENGTH_BY_LETTER[letter])) + data = get_cachable_data(url) + return json.decode(data) + +def get_cachable_data(url, ttl_seconds = CACHE_TTL_SECONDS): + key = base64.encode(url) + + data = cache.get(key) + if data != None: + return base64.decode(data) + + res = http.get(url = url) + if res.status_code != 200: + fail("request to %s failed with status code: %d - %s" % (url, res.status_code, res.body())) + + cache.set(key, base64.encode(res.body()), ttl_seconds = ttl_seconds) + + return res.body() \ No newline at end of file From 999cdf0615af848c08df74b7150365bd0488c817 Mon Sep 17 00:00:00 2001 From: Blake Wehrle Date: Tue, 31 Oct 2023 15:30:01 -0400 Subject: [PATCH 2/6] updating manifest --- apps/runescape/manifest.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/runescape/manifest.yaml b/apps/runescape/manifest.yaml index 4d51333a0c..4287dbf02e 100644 --- a/apps/runescape/manifest.yaml +++ b/apps/runescape/manifest.yaml @@ -1,8 +1,8 @@ --- id: runescape -name: OSRS Runescape Grand Exchange -summary: Shows item information from OSRS Runescape's Grand Exchange -desc: Shows item information from OSRS Runescape using the Runescape API. +name: OS Runescape Grand Exchange +summary: Shows item information from OSRS's Grand Exchange +desc: Shows item information from Runescape using the Runescape API. author: blakekwehrle fileName: runescape.star packageName: runescape \ No newline at end of file From d629ae90dc539ae0d9abc63527ac707fe0e0ca6a Mon Sep 17 00:00:00 2001 From: Blake Wehrle Date: Tue, 31 Oct 2023 17:07:46 -0400 Subject: [PATCH 3/6] formatted and added author section --- apps/runescape/runescape.star | 89 +++++++++++++++++++++++------------ 1 file changed, 60 insertions(+), 29 deletions(-) diff --git a/apps/runescape/runescape.star b/apps/runescape/runescape.star index c7c4021441..90dfe09ca3 100644 --- a/apps/runescape/runescape.star +++ b/apps/runescape/runescape.star @@ -1,3 +1,10 @@ +""" +Applet: OS Runescape Grand Exchange +Summary: Shows item information from OSRS's Grand Exchange +Description: Shows item information from Runescape using the Runescape API. +Author: blakekwehrle +""" + load("cache.star", "cache") load("encoding/base64.star", "base64") load("encoding/json.star", "json") @@ -6,29 +13,53 @@ load("random.star", "random") load("render.star", "render") load("schema.star", "schema") -CACHE_TTL_SECONDS = 36604800 # 7 days in seconds. +CACHE_TTL_SECONDS = 36604800 # 7 days in seconds. RUNESCAPEAPI_ITEMLIST_URL = "https://secure.runescape.com/m=itemdb_oldschool/api/catalogue/items.json?category=1&alpha={0}&page={1}" -PAGE_LENGTH_BY_LETTER = { 'a': 30, 'b': 40, 'c': 16, 'd': 20, 'e': 11, 'f': 8, 'g': 18, 'h': 5, - 'i': 10, 'j': 4, 'k': 4, 'l': 7, 'm': 25, 'n': 3, 'o': 9, 'p': 13, - 'r': 25, 's': 44, 't': 22, 'u': 5, 'v': 5, 'w': 11, 'x': 1, 'y': 3, 'z': 5} - +PAGE_LENGTH_BY_LETTER = { + "a": 30, + "b": 40, + "c": 16, + "d": 20, + "e": 11, + "f": 8, + "g": 18, + "h": 5, + "i": 10, + "j": 4, + "k": 4, + "l": 7, + "m": 25, + "n": 3, + "o": 9, + "p": 13, + "r": 25, + "s": 44, + "t": 22, + "u": 5, + "v": 5, + "w": 11, + "x": 1, + "y": 3, + "z": 5, +} + UP_CARROT_ICON = base64.decode("""R0lGODdhBgAFAHcAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFQAAAACwAAAAABgAFAIEAAABZwTXW8mQAAAACCQRkJoEX35KMBQAh+QQJQAAAACwAAAAABgAFAIEAAABZwTXW8mQAAAACCQRkJoEX35KMBQAh+QQFQAAAACwAAAAABgAFAIEAAABZwTXW8mQAAAACCoQiYMGp/5w6rgAAIfkECUAAAAAsAAAAAAYABQCBAAAAWcE11vJkAAAAAgqEImDBqf+cOq4AACH5BAVAAAAALAAAAAAGAAUAgQAAAFnBNdbyZAAAAAIJVC6gu9nhDAIFACH5BAlAAAAALAAAAAAGAAUAgQAAAFnBNdbyZAAAAAIJVC6gu9nhDAIFACH5BAVAAAAALAAAAAAGAAUAgQAAAFnBNdbyZAAAAAIJhG+CEgocGjoFACH5BAlAAAAALAAAAAAGAAUAgQAAAFnBNdbyZAAAAAIJhG+CEgocGjoFADs=""") DOWN_CARROT_ICON = base64.decode("""R0lGODdhBgAFAHcAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFBQAAACwAAAAABgAFAIEAAADuCwv4cHAAAAACCIQvoWLJeKIpACH5BAkFAAAALAAAAAAGAAUAgQAAAO4LC/hwcAAAAAIIhC+hYsl4oikAIfkEBQUAAAAsAAAAAAYABQCBAAAA7gsL+HBwAAAAAgkEZKkSjReekQUAIfkECQUAAAAsAAAAAAYABQCBAAAA7gsL+HBwAAAAAgkEZKkSjReekQUAIfkEBQUAAAAsAAAAAAYABQCBAAAA7gsL+HBwAAAAAgqEIqC2rRfQk6AAACH5BAkFAAAALAAAAAAGAAUAgQAAAO4LC/hwcAAAAAIKhCKgtq0X0JOgAAAh+QQFBQAAACwAAAAABgAFAIEAAADuCwv4cHAAAAACClQuAJa6DpVBoAAAIfkECQUAAAAsAAAAAAYABQCBAAAA7gsL+HBwAAAAAgpULgCWug6VQaAAADs=""") LINE_ICON = base64.decode("""R0lGODdhBgAFAHcAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFCgAAACwAAAAABgAFAIAAAABw2O4CCIQPoRbXCE8BACH5BAkKAAAALAAAAAAGAAUAgAAAAHDY7gIIhA+hFtcITwEAIfkEBQoAAAAsAAAAAAYABQCAAAAAcNjuAgeEb6Gw6F8AACH5BAkKAAAALAAAAAAGAAUAgAAAAHDY7gIHhG+hsOhfAAAh+QQFCgAAACwAAAAABgAFAIAAAABw2O4CB4R/EaaJbwoAIfkECQoAAAAsAAAAAAYABQCAAAAAcNjuAgeEfxGmiW8KACH5BAUKAAAALAAAAAAGAAUAgAAAAHDY7gIIhI9xocAIQQEAIfkECQoAAAAsAAAAAAYABQCAAAAAcNjuAgiEj3GhwAhBAQAh+QQFCgAAACwAAAAABgAFAIAAAABw2O4CB4SPGQHLeQoAIfkECQoAAAAsAAAAAAYABQCAAAAAcNjuAgeEjxkBy3kKACH5BAUKAAAALAAAAAAGAAUAgAAAAHDY7gIIhI8WtxCfTgEAIfkECQoAAAAsAAAAAAYABQCAAAAAcNjuAgiEjxa3EJ9OAQAh+QQFCgAAACwAAAAABgAFAIAAAABw2O4CB4SPFpGw3AoAIfkECQoAAAAsAAAAAAYABQCAAAAAcNjuAgeEjxaRsNwKACH5BAUKAAAALAAAAAAGAAUAgAAAAHDY7gIHhB+HqRDcCgAh+QQJCgAAACwAAAAABgAFAIAAAABw2O4CB4Qfh6kQ3AoAIfkEBQoAAAAsAAAAAAYABQCAAAAAcNjuAgeEH3GoC+0KACH5BAkKAAAALAAAAAAGAAUAgAAAAHDY7gIHhB9xqAvtCgAh+QQFCgAAACwAAAAABgAFAIAAAABw2O4CB4QfeRjrWwAAIfkECQoAAAAsAAAAAAYABQCAAAAAcNjuAgeEH3kY61sAADs=""") def main(): - random_letter = 'abcdefghijklmnoprstuvwxyz'[pick_letter()] + random_letter = "abcdefghijklmnoprstuvwxyz"[pick_letter()] item_list = get_item_list(random_letter) number_of_items = len(item_list["items"]) - random_item_index = random.number(0, number_of_items-1) + random_item_index = random.number(0, number_of_items - 1) item_name = item_list["items"][random_item_index]["name"] item_trend = item_list["items"][random_item_index]["today"]["trend"] item_price = str(item_list["items"][random_item_index]["current"]["price"]) + " gp" sprite_url = item_list["items"][random_item_index]["icon"] sprite = get_cachable_data(sprite_url) - if(item_trend == "positive"): + if (item_trend == "positive"): selected_image = UP_CARROT_ICON - elif(item_trend == "neutral"): + elif (item_trend == "neutral"): selected_image = DOWN_CARROT_ICON else: selected_image = LINE_ICON @@ -43,23 +74,23 @@ def main(): ), render.Column( children = [ - render.WrappedText ( - content=item_name, - width=64, - font="tom-thumb", + render.WrappedText( + content = item_name, + width = 64, + font = "tom-thumb", ), render.Row( main_align = "space_between", cross_align = "center", children = [ - render.Image(src=selected_image), - render.WrappedText ( - content=item_price, - width=64, - font="tom-thumb", + render.Image(src = selected_image), + render.WrappedText( + content = item_price, + width = 64, + font = "tom-thumb", ), ], - ) + ), ], ), ], @@ -67,19 +98,19 @@ def main(): ) def pick_letter(): - random_page_index = random.number(0, 344) - mySum = 0 - for index, pageCount in enumerate(PAGE_LENGTH_BY_LETTER.values()): - if random_page_index < mySum: - return index - else: - mySum += pageCount - + random_page_index = random.number(0, 344) + mySum = 0 + for index, pageCount in enumerate(PAGE_LENGTH_BY_LETTER.values()): + if random_page_index < mySum: + return index + else: + mySum += pageCount + def get_item_list(letter): url = RUNESCAPEAPI_ITEMLIST_URL.format(letter, random.number(0, PAGE_LENGTH_BY_LETTER[letter])) data = get_cachable_data(url) return json.decode(data) - + def get_cachable_data(url, ttl_seconds = CACHE_TTL_SECONDS): key = base64.encode(url) @@ -93,4 +124,4 @@ def get_cachable_data(url, ttl_seconds = CACHE_TTL_SECONDS): cache.set(key, base64.encode(res.body()), ttl_seconds = ttl_seconds) - return res.body() \ No newline at end of file + return res.body() From 0ed8f937fb2f8652b14bfe962f4b424652681fae Mon Sep 17 00:00:00 2001 From: Blake Wehrle Date: Tue, 31 Oct 2023 17:10:52 -0400 Subject: [PATCH 4/6] fixes from pixlet lint --- apps/runescape/runescape.star | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/runescape/runescape.star b/apps/runescape/runescape.star index 90dfe09ca3..1f4a6db3cf 100644 --- a/apps/runescape/runescape.star +++ b/apps/runescape/runescape.star @@ -11,7 +11,6 @@ load("encoding/json.star", "json") load("http.star", "http") load("random.star", "random") load("render.star", "render") -load("schema.star", "schema") CACHE_TTL_SECONDS = 36604800 # 7 days in seconds. RUNESCAPEAPI_ITEMLIST_URL = "https://secure.runescape.com/m=itemdb_oldschool/api/catalogue/items.json?category=1&alpha={0}&page={1}" @@ -105,6 +104,7 @@ def pick_letter(): return index else: mySum += pageCount + return 0 def get_item_list(letter): url = RUNESCAPEAPI_ITEMLIST_URL.format(letter, random.number(0, PAGE_LENGTH_BY_LETTER[letter])) From 770e750092039a2c7cc0dedc9cda01b969a3f5fd Mon Sep 17 00:00:00 2001 From: Blake Wehrle Date: Tue, 31 Oct 2023 17:14:28 -0400 Subject: [PATCH 5/6] update manifest name to be <17 characters --- apps/runescape/manifest.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/runescape/manifest.yaml b/apps/runescape/manifest.yaml index 4287dbf02e..c759ce5aa2 100644 --- a/apps/runescape/manifest.yaml +++ b/apps/runescape/manifest.yaml @@ -1,6 +1,6 @@ --- id: runescape -name: OS Runescape Grand Exchange +name: OSRS Exchange summary: Shows item information from OSRS's Grand Exchange desc: Shows item information from Runescape using the Runescape API. author: blakekwehrle From 7179127add382b6635e9b67a1b6e8f2806342038 Mon Sep 17 00:00:00 2001 From: Blake Wehrle Date: Tue, 31 Oct 2023 17:20:15 -0400 Subject: [PATCH 6/6] update summary to be <27 chars --- apps/runescape/manifest.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/runescape/manifest.yaml b/apps/runescape/manifest.yaml index c759ce5aa2..a8f29114b8 100644 --- a/apps/runescape/manifest.yaml +++ b/apps/runescape/manifest.yaml @@ -1,7 +1,7 @@ --- id: runescape name: OSRS Exchange -summary: Shows item information from OSRS's Grand Exchange +summary: OS Runescape GE Item Info desc: Shows item information from Runescape using the Runescape API. author: blakekwehrle fileName: runescape.star