[READ-ONLY] Mirror of https://github.com/flo-bit/bluesky-trending. show trending bluesky hashtags of the last day/hour flo-bit.dev/bluesky-trending/
0

Configure Feed

Select the types of activity you want to include in your feed.

add greek, switch api

Florian (Nov 30, 2024, 12:38 AM +0100) 202bc52d 3b4c04b6

+44 -358
+5 -297
package-lock.json
··· 8 8 "name": "bluesky-trending-frontend", 9 9 "version": "0.0.1", 10 10 "dependencies": { 11 - "@libsql/client": "^0.14.0", 12 11 "@sveltejs/adapter-static": "^3.0.6", 13 12 "clsx": "^2.1.1", 14 13 "gsap": "^3.12.5", ··· 652 651 "@jridgewell/sourcemap-codec": "^1.4.14" 653 652 } 654 653 }, 655 - "node_modules/@libsql/client": { 656 - "version": "0.14.0", 657 - "resolved": "https://registry.npmjs.org/@libsql/client/-/client-0.14.0.tgz", 658 - "integrity": "sha512-/9HEKfn6fwXB5aTEEoMeFh4CtG0ZzbncBb1e++OCdVpgKZ/xyMsIVYXm0w7Pv4RUel803vE6LwniB3PqD72R0Q==", 659 - "dependencies": { 660 - "@libsql/core": "^0.14.0", 661 - "@libsql/hrana-client": "^0.7.0", 662 - "js-base64": "^3.7.5", 663 - "libsql": "^0.4.4", 664 - "promise-limit": "^2.7.0" 665 - } 666 - }, 667 - "node_modules/@libsql/core": { 668 - "version": "0.14.0", 669 - "resolved": "https://registry.npmjs.org/@libsql/core/-/core-0.14.0.tgz", 670 - "integrity": "sha512-nhbuXf7GP3PSZgdCY2Ecj8vz187ptHlZQ0VRc751oB2C1W8jQUXKKklvt7t1LJiUTQBVJuadF628eUk+3cRi4Q==", 671 - "dependencies": { 672 - "js-base64": "^3.7.5" 673 - } 674 - }, 675 - "node_modules/@libsql/darwin-arm64": { 676 - "version": "0.4.7", 677 - "resolved": "https://registry.npmjs.org/@libsql/darwin-arm64/-/darwin-arm64-0.4.7.tgz", 678 - "integrity": "sha512-yOL742IfWUlUevnI5PdnIT4fryY3LYTdLm56bnY0wXBw7dhFcnjuA7jrH3oSVz2mjZTHujxoITgAE7V6Z+eAbg==", 679 - "cpu": [ 680 - "arm64" 681 - ], 682 - "optional": true, 683 - "os": [ 684 - "darwin" 685 - ] 686 - }, 687 - "node_modules/@libsql/darwin-x64": { 688 - "version": "0.4.7", 689 - "resolved": "https://registry.npmjs.org/@libsql/darwin-x64/-/darwin-x64-0.4.7.tgz", 690 - "integrity": "sha512-ezc7V75+eoyyH07BO9tIyJdqXXcRfZMbKcLCeF8+qWK5nP8wWuMcfOVywecsXGRbT99zc5eNra4NEx6z5PkSsA==", 691 - "cpu": [ 692 - "x64" 693 - ], 694 - "optional": true, 695 - "os": [ 696 - "darwin" 697 - ] 698 - }, 699 - "node_modules/@libsql/hrana-client": { 700 - "version": "0.7.0", 701 - "resolved": "https://registry.npmjs.org/@libsql/hrana-client/-/hrana-client-0.7.0.tgz", 702 - "integrity": "sha512-OF8fFQSkbL7vJY9rfuegK1R7sPgQ6kFMkDamiEccNUvieQ+3urzfDFI616oPl8V7T9zRmnTkSjMOImYCAVRVuw==", 703 - "dependencies": { 704 - "@libsql/isomorphic-fetch": "^0.3.1", 705 - "@libsql/isomorphic-ws": "^0.1.5", 706 - "js-base64": "^3.7.5", 707 - "node-fetch": "^3.3.2" 708 - } 709 - }, 710 - "node_modules/@libsql/isomorphic-fetch": { 711 - "version": "0.3.1", 712 - "resolved": "https://registry.npmjs.org/@libsql/isomorphic-fetch/-/isomorphic-fetch-0.3.1.tgz", 713 - "integrity": "sha512-6kK3SUK5Uu56zPq/Las620n5aS9xJq+jMBcNSOmjhNf/MUvdyji4vrMTqD7ptY7/4/CAVEAYDeotUz60LNQHtw==", 714 - "engines": { 715 - "node": ">=18.0.0" 716 - } 717 - }, 718 - "node_modules/@libsql/isomorphic-ws": { 719 - "version": "0.1.5", 720 - "resolved": "https://registry.npmjs.org/@libsql/isomorphic-ws/-/isomorphic-ws-0.1.5.tgz", 721 - "integrity": "sha512-DtLWIH29onUYR00i0GlQ3UdcTRC6EP4u9w/h9LxpUZJWRMARk6dQwZ6Jkd+QdwVpuAOrdxt18v0K2uIYR3fwFg==", 722 - "dependencies": { 723 - "@types/ws": "^8.5.4", 724 - "ws": "^8.13.0" 725 - } 726 - }, 727 - "node_modules/@libsql/linux-arm64-gnu": { 728 - "version": "0.4.7", 729 - "resolved": "https://registry.npmjs.org/@libsql/linux-arm64-gnu/-/linux-arm64-gnu-0.4.7.tgz", 730 - "integrity": "sha512-WlX2VYB5diM4kFfNaYcyhw5y+UJAI3xcMkEUJZPtRDEIu85SsSFrQ+gvoKfcVh76B//ztSeEX2wl9yrjF7BBCA==", 731 - "cpu": [ 732 - "arm64" 733 - ], 734 - "optional": true, 735 - "os": [ 736 - "linux" 737 - ] 738 - }, 739 - "node_modules/@libsql/linux-arm64-musl": { 740 - "version": "0.4.7", 741 - "resolved": "https://registry.npmjs.org/@libsql/linux-arm64-musl/-/linux-arm64-musl-0.4.7.tgz", 742 - "integrity": "sha512-6kK9xAArVRlTCpWeqnNMCoXW1pe7WITI378n4NpvU5EJ0Ok3aNTIC2nRPRjhro90QcnmLL1jPcrVwO4WD1U0xw==", 743 - "cpu": [ 744 - "arm64" 745 - ], 746 - "optional": true, 747 - "os": [ 748 - "linux" 749 - ] 750 - }, 751 - "node_modules/@libsql/linux-x64-gnu": { 752 - "version": "0.4.7", 753 - "resolved": "https://registry.npmjs.org/@libsql/linux-x64-gnu/-/linux-x64-gnu-0.4.7.tgz", 754 - "integrity": "sha512-CMnNRCmlWQqqzlTw6NeaZXzLWI8bydaXDke63JTUCvu8R+fj/ENsLrVBtPDlxQ0wGsYdXGlrUCH8Qi9gJep0yQ==", 755 - "cpu": [ 756 - "x64" 757 - ], 758 - "optional": true, 759 - "os": [ 760 - "linux" 761 - ] 762 - }, 763 - "node_modules/@libsql/linux-x64-musl": { 764 - "version": "0.4.7", 765 - "resolved": "https://registry.npmjs.org/@libsql/linux-x64-musl/-/linux-x64-musl-0.4.7.tgz", 766 - "integrity": "sha512-nI6tpS1t6WzGAt1Kx1n1HsvtBbZ+jHn0m7ogNNT6pQHZQj7AFFTIMeDQw/i/Nt5H38np1GVRNsFe99eSIMs9XA==", 767 - "cpu": [ 768 - "x64" 769 - ], 770 - "optional": true, 771 - "os": [ 772 - "linux" 773 - ] 774 - }, 775 - "node_modules/@libsql/win32-x64-msvc": { 776 - "version": "0.4.7", 777 - "resolved": "https://registry.npmjs.org/@libsql/win32-x64-msvc/-/win32-x64-msvc-0.4.7.tgz", 778 - "integrity": "sha512-7pJzOWzPm6oJUxml+PCDRzYQ4A1hTMHAciTAHfFK4fkbDZX33nWPVG7Y3vqdKtslcwAzwmrNDc6sXy2nwWnbiw==", 779 - "cpu": [ 780 - "x64" 781 - ], 782 - "optional": true, 783 - "os": [ 784 - "win32" 785 - ] 786 - }, 787 - "node_modules/@neon-rs/load": { 788 - "version": "0.0.4", 789 - "resolved": "https://registry.npmjs.org/@neon-rs/load/-/load-0.0.4.tgz", 790 - "integrity": "sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw==" 791 - }, 792 654 "node_modules/@nodelib/fs.scandir": { 793 655 "version": "2.1.5", 794 656 "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", ··· 1162 1024 "version": "22.9.3", 1163 1025 "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.3.tgz", 1164 1026 "integrity": "sha512-F3u1fs/fce3FFk+DAxbxc78DF8x0cY09RRL8GnXLmkJ1jvx3TtPdWoTT5/NiYfI5ASqXBmfqJi9dZ3gxMx4lzw==", 1027 + "optional": true, 1028 + "peer": true, 1165 1029 "dependencies": { 1166 1030 "undici-types": "~6.19.8" 1167 - } 1168 - }, 1169 - "node_modules/@types/ws": { 1170 - "version": "8.5.13", 1171 - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.13.tgz", 1172 - "integrity": "sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==", 1173 - "dependencies": { 1174 - "@types/node": "*" 1175 1031 } 1176 1032 }, 1177 1033 "node_modules/@typescript-eslint/eslint-plugin": { ··· 1771 1627 "node": ">=4" 1772 1628 } 1773 1629 }, 1774 - "node_modules/data-uri-to-buffer": { 1775 - "version": "4.0.1", 1776 - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", 1777 - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", 1778 - "engines": { 1779 - "node": ">= 12" 1780 - } 1781 - }, 1782 1630 "node_modules/debug": { 1783 1631 "version": "4.3.7", 1784 1632 "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", ··· 1807 1655 "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", 1808 1656 "engines": { 1809 1657 "node": ">=0.10.0" 1810 - } 1811 - }, 1812 - "node_modules/detect-libc": { 1813 - "version": "2.0.2", 1814 - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", 1815 - "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", 1816 - "engines": { 1817 - "node": ">=8" 1818 1658 } 1819 1659 }, 1820 1660 "node_modules/devalue": { ··· 2200 2040 } 2201 2041 } 2202 2042 }, 2203 - "node_modules/fetch-blob": { 2204 - "version": "3.2.0", 2205 - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", 2206 - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", 2207 - "funding": [ 2208 - { 2209 - "type": "github", 2210 - "url": "https://github.com/sponsors/jimmywarting" 2211 - }, 2212 - { 2213 - "type": "paypal", 2214 - "url": "https://paypal.me/jimmywarting" 2215 - } 2216 - ], 2217 - "dependencies": { 2218 - "node-domexception": "^1.0.0", 2219 - "web-streams-polyfill": "^3.0.3" 2220 - }, 2221 - "engines": { 2222 - "node": "^12.20 || >= 14.13" 2223 - } 2224 - }, 2225 2043 "node_modules/file-entry-cache": { 2226 2044 "version": "8.0.0", 2227 2045 "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", ··· 2295 2113 }, 2296 2114 "funding": { 2297 2115 "url": "https://github.com/sponsors/isaacs" 2298 - } 2299 - }, 2300 - "node_modules/formdata-polyfill": { 2301 - "version": "4.0.10", 2302 - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", 2303 - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", 2304 - "dependencies": { 2305 - "fetch-blob": "^3.1.2" 2306 - }, 2307 - "engines": { 2308 - "node": ">=12.20.0" 2309 2116 } 2310 2117 }, 2311 2118 "node_modules/fraction.js": { ··· 2600 2407 "jiti": "bin/jiti.js" 2601 2408 } 2602 2409 }, 2603 - "node_modules/js-base64": { 2604 - "version": "3.7.7", 2605 - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz", 2606 - "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==" 2607 - }, 2608 2410 "node_modules/js-yaml": { 2609 2411 "version": "4.1.0", 2610 2412 "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", ··· 2669 2471 }, 2670 2472 "engines": { 2671 2473 "node": ">= 0.8.0" 2672 - } 2673 - }, 2674 - "node_modules/libsql": { 2675 - "version": "0.4.7", 2676 - "resolved": "https://registry.npmjs.org/libsql/-/libsql-0.4.7.tgz", 2677 - "integrity": "sha512-T9eIRCs6b0J1SHKYIvD8+KCJMcWZ900iZyxdnSCdqxN12Z1ijzT+jY5nrk72Jw4B0HGzms2NgpryArlJqvc3Lw==", 2678 - "cpu": [ 2679 - "x64", 2680 - "arm64", 2681 - "wasm32" 2682 - ], 2683 - "os": [ 2684 - "darwin", 2685 - "linux", 2686 - "win32" 2687 - ], 2688 - "dependencies": { 2689 - "@neon-rs/load": "^0.0.4", 2690 - "detect-libc": "2.0.2" 2691 - }, 2692 - "optionalDependencies": { 2693 - "@libsql/darwin-arm64": "0.4.7", 2694 - "@libsql/darwin-x64": "0.4.7", 2695 - "@libsql/linux-arm64-gnu": "0.4.7", 2696 - "@libsql/linux-arm64-musl": "0.4.7", 2697 - "@libsql/linux-x64-gnu": "0.4.7", 2698 - "@libsql/linux-x64-musl": "0.4.7", 2699 - "@libsql/win32-x64-msvc": "0.4.7" 2700 2474 } 2701 2475 }, 2702 2476 "node_modules/lilconfig": { ··· 2863 2637 "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 2864 2638 "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 2865 2639 "dev": true 2866 - }, 2867 - "node_modules/node-domexception": { 2868 - "version": "1.0.0", 2869 - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", 2870 - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", 2871 - "funding": [ 2872 - { 2873 - "type": "github", 2874 - "url": "https://github.com/sponsors/jimmywarting" 2875 - }, 2876 - { 2877 - "type": "github", 2878 - "url": "https://paypal.me/jimmywarting" 2879 - } 2880 - ], 2881 - "engines": { 2882 - "node": ">=10.5.0" 2883 - } 2884 - }, 2885 - "node_modules/node-fetch": { 2886 - "version": "3.3.2", 2887 - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", 2888 - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", 2889 - "dependencies": { 2890 - "data-uri-to-buffer": "^4.0.0", 2891 - "fetch-blob": "^3.1.4", 2892 - "formdata-polyfill": "^4.0.10" 2893 - }, 2894 - "engines": { 2895 - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 2896 - }, 2897 - "funding": { 2898 - "type": "opencollective", 2899 - "url": "https://opencollective.com/node-fetch" 2900 - } 2901 2640 }, 2902 2641 "node_modules/node-releases": { 2903 2642 "version": "2.0.18", ··· 3372 3111 "optional": true 3373 3112 } 3374 3113 } 3375 - }, 3376 - "node_modules/promise-limit": { 3377 - "version": "2.7.0", 3378 - "resolved": "https://registry.npmjs.org/promise-limit/-/promise-limit-2.7.0.tgz", 3379 - "integrity": "sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw==" 3380 3114 }, 3381 3115 "node_modules/punycode": { 3382 3116 "version": "2.3.1", ··· 4173 3907 "node_modules/undici-types": { 4174 3908 "version": "6.19.8", 4175 3909 "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", 4176 - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" 3910 + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", 3911 + "optional": true, 3912 + "peer": true 4177 3913 }, 4178 3914 "node_modules/update-browserslist-db": { 4179 3915 "version": "1.1.1", ··· 4291 4027 } 4292 4028 } 4293 4029 }, 4294 - "node_modules/web-streams-polyfill": { 4295 - "version": "3.3.3", 4296 - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", 4297 - "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", 4298 - "engines": { 4299 - "node": ">= 8" 4300 - } 4301 - }, 4302 4030 "node_modules/which": { 4303 4031 "version": "2.0.2", 4304 4032 "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", ··· 4409 4137 }, 4410 4138 "funding": { 4411 4139 "url": "https://github.com/chalk/ansi-styles?sponsor=1" 4412 - } 4413 - }, 4414 - "node_modules/ws": { 4415 - "version": "8.18.0", 4416 - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", 4417 - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", 4418 - "engines": { 4419 - "node": ">=10.0.0" 4420 - }, 4421 - "peerDependencies": { 4422 - "bufferutil": "^4.0.1", 4423 - "utf-8-validate": ">=5.0.2" 4424 - }, 4425 - "peerDependenciesMeta": { 4426 - "bufferutil": { 4427 - "optional": true 4428 - }, 4429 - "utf-8-validate": { 4430 - "optional": true 4431 - } 4432 4140 } 4433 4141 }, 4434 4142 "node_modules/yaml": {
-1
package.json
··· 31 31 "vite": "^5.0.3" 32 32 }, 33 33 "dependencies": { 34 - "@libsql/client": "^0.14.0", 35 34 "@sveltejs/adapter-static": "^3.0.6", 36 35 "clsx": "^2.1.1", 37 36 "gsap": "^3.12.5",
+3 -1
svelte.config.js
··· 21 21 fa: '🇮🇷', // Persian (Farsi) 22 22 th: '🇹🇭', // Thai 23 23 it: '🇮🇹', // Italian 24 - uk: '🇺🇦' // Ukrainian 24 + uk: '🇺🇦', // Ukrainian 25 + el: '🇬🇷' // Greek 25 26 }; 27 + 26 28 27 29 /** @type {import('@sveltejs/kit').Config} */ 28 30 const config = {
+2 -1
src/lib/emojis.ts
··· 18 18 fa: '🇮🇷', // Persian (Farsi) 19 19 th: '🇹🇭', // Thai 20 20 it: '🇮🇹', // Italian 21 - uk: '🇺🇦' // Ukrainian 21 + uk: '🇺🇦', // Ukrainian 22 + el: '🇬🇷' // Greek 22 23 };
+16 -51
src/lib/index.ts
··· 1 - import { TURSO_AUTH_TOKEN, TURSO_DATABASE_URL } from '$env/static/private'; 2 - import { createClient } from '@libsql/client'; 3 - 4 - const client = createClient({ 5 - url: TURSO_DATABASE_URL, // Your Turso database URL 6 - authToken: TURSO_AUTH_TOKEN // Your Turso authentication token 7 - }); 1 + import { API_URL } from '$env/static/private'; 8 2 9 3 // Function to get all languages in the database 10 4 export async function getAllLanguages() { 11 - const result = await client.execute({ 12 - sql: `SELECT DISTINCT lang FROM hashtags WHERE lang IS NOT NULL;`, 13 - args: [] 14 - }); 15 - return result.rows.map((row) => row.lang); 16 - } 17 - 18 - // Helper function to get top hashtags within a specified time frame 19 - export async function getTopHashtags(hours: number, lang: string | null = null) { 20 - const timestampThreshold = Date.now() * 1000 - hours * 3600 * 1000_000; 21 - let sql = ` 22 - SELECT tag, SUM(count) AS total_count 23 - FROM hashtags 24 - WHERE timestamp >= ? 25 - `; 26 - const args: (number | string)[] = [timestampThreshold]; 27 - 28 - if (lang) { 29 - if (lang === 'en') { 30 - sql += ` AND (lang = ? OR lang = '')`; 31 - args.push(lang); 32 - } else { 33 - sql += ` AND lang = ?`; 34 - args.push(lang); 35 - } 36 - } 37 - 38 - sql += ` 39 - GROUP BY tag 40 - ORDER BY total_count DESC 41 - LIMIT 50; 42 - `; 43 - 44 - const result = await client.execute({ sql, args }); 45 - return result.rows; 5 + const response = await fetch(API_URL + '/api/languages'); 6 + return response.json(); 46 7 } 47 8 48 9 // Function to get top 100 hashtags of the last hour 49 - export async function getTopHashtagsLastHour(lang = null) { 50 - return await getTopHashtags(1, lang); 10 + export async function getTopHashtagsLastHour(lang: string) { 11 + const response = await fetch( 12 + API_URL + '/api/top-hashtags/last-hour' + (lang ? `?lang=${lang}` : '') 13 + ); 14 + return response.json(); 51 15 } 52 16 53 17 // Function to get top 100 hashtags of the last 24 hours 54 - export async function getTopHashtagsLast24Hours(lang = null) { 55 - return await getTopHashtags(24, lang); 18 + export async function getTopHashtagsLast24Hours(lang: string) { 19 + const response = await fetch( 20 + API_URL + '/api/top-hashtags/last-24-hours' + (lang ? `?lang=${lang}` : '') 21 + ); 22 + return response.json(); 56 23 } 57 24 58 25 // Function to get the last update timestamp 59 26 export async function getLastUpdateTimestamp() { 60 - const result = await client.execute({ 61 - sql: `SELECT MAX(timestamp) AS last_timestamp FROM hashtags;`, 62 - args: [] 63 - }); 64 - return result.rows[0].last_timestamp; 27 + const response = await fetch(API_URL + '/api/last-update-timestamp'); 28 + const data = await response.json(); 29 + return data.last_timestamp; 65 30 }
+10 -4
src/routes/+page.server.ts
··· 1 - import { getAllLanguages, getLastUpdateTimestamp, getTopHashtags } from '$lib'; 1 + import { 2 + getAllLanguages, 3 + getLastUpdateTimestamp, 4 + getTopHashtagsLastHour, 5 + getTopHashtagsLast24Hours 6 + } from '$lib'; 7 + import { languageEmojis } from '$lib/emojis'; 2 8 3 9 /** @type {import('./$types').PageServerLoad} */ 4 10 export async function load() { 5 11 const languages = (await getAllLanguages()) 6 12 .sort((a: string, b: string) => a.localeCompare(b)) 7 - .filter((language: string) => language !== 'br'); 13 + .filter((lang) => languageEmojis[lang]); 8 14 9 - const lastHourTags = await getTopHashtags(1, 'en'); 10 - const last24HourTags = await getTopHashtags(24, 'en'); 15 + const lastHourTags = await getTopHashtagsLastHour('en'); 16 + const last24HourTags = await getTopHashtagsLast24Hours('en'); 11 17 12 18 const lastUpdateTimestamp = (await getLastUpdateTimestamp()) ?? new Date().getTime() * 1000; 13 19
+8 -3
src/routes/[lang]/+page.server.ts
··· 1 - import { getAllLanguages, getLastUpdateTimestamp, getTopHashtags } from '$lib'; 1 + import { 2 + getAllLanguages, 3 + getLastUpdateTimestamp, 4 + getTopHashtagsLast24Hours, 5 + getTopHashtagsLastHour 6 + } from '$lib'; 2 7 import { languageEmojis } from '$lib/emojis.js'; 3 8 4 9 /** @type {import('./$types').PageServerLoad} */ ··· 9 14 .sort((a: string, b: string) => a.localeCompare(b)) 10 15 .filter((lang) => languageEmojis[lang]); 11 16 12 - const lastHourTags = await getTopHashtags(1, languageCode); 13 - const last24HourTags = await getTopHashtags(24, languageCode); 17 + const lastHourTags = await getTopHashtagsLastHour(languageCode); 18 + const last24HourTags = await getTopHashtagsLast24Hours(languageCode); 14 19 15 20 const lastUpdateTimestamp = (await getLastUpdateTimestamp()) ?? new Date().getTime() * 1000; 16 21