diff --git a/.contents/card-links.json b/.contents/card-links.json index 9b5719b..b2a96b5 100644 --- a/.contents/card-links.json +++ b/.contents/card-links.json @@ -1,22 +1,22 @@ { - "https://oriverk.dev/blog/20240300-gfm-alerts/": { - "title": "GFM Alerts記法のスニペットを設定する | oriverk.dev", - "description": "", - "image": "https://oriverk.dev/api/og/blog/20240300-gfm-alerts.png" - }, "https://www.youtube.com/watch?v=ZXsQAXx_ao0": { "title": "Shia LaBeouf \"Just Do It\" Motivational Speech (Original Video by LaBeouf, Rönkkö & Turner)", "description": "Joshua Parker's segment from #INTRODUCTIONS (2015) by LaBeouf, Rönkkö & Turner http://labeoufronkkoturner.com Full 30-minute version: https://vimeo.com/12509...", "image": "https://i.ytimg.com/vi/ZXsQAXx_ao0/maxresdefault.jpg" }, + "https://oriverk.dev/blog/20240300-gfm-alerts/": { + "title": "GFM Alerts記法のスニペットを設定する | oriverk.dev", + "description": "", + "image": "https://oriverk.dev/api/og/blog/20240300-gfm-alerts.webp" + }, "https://github.com/octocat/Hello-World/blob/master/README": { "title": "Hello-World/README at master · octocat/Hello-World", "description": "My first repository on GitHub! Contribute to octocat/Hello-World development by creating an account on GitHub.", - "image": "https://opengraph.githubassets.com/672a894454a1838d578f8e26229dbfd8158d4889b334944ee8987d9951e366aa/octocat/Hello-World" + "image": "https://opengraph.githubassets.com/520dceae5ded345e6c8fe143a140ba5152bb7031694d6f35f1a84ae01a9e6480/octocat/Hello-World" }, "https://www.youtube.com/watch?v=dQw4w9WgXcQ": { "title": "Rick Astley - Never Gonna Give You Up (Official Music Video)", "description": "The official video for “Never Gonna Give You Up” by Rick Astley. The new album 'Are We There Yet?' is out now: Download here: https://RickAstley.lnk.to/AreWe...", "image": "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg" } -} \ No newline at end of file +} diff --git a/src/assets/images/og/081fbff1af3f669076fc4a33add390bbc247318948176b85634e40ee01d9d558.webp b/src/assets/images/og/081fbff1af3f669076fc4a33add390bbc247318948176b85634e40ee01d9d558.webp new file mode 100644 index 0000000..d7fae81 Binary files /dev/null and b/src/assets/images/og/081fbff1af3f669076fc4a33add390bbc247318948176b85634e40ee01d9d558.webp differ diff --git a/src/assets/images/og/0f419efebc260a2e6af18a62a9b8391bc5dccfa31eef59487c66991843b36454.webp b/src/assets/images/og/0f419efebc260a2e6af18a62a9b8391bc5dccfa31eef59487c66991843b36454.webp new file mode 100644 index 0000000..c83758f Binary files /dev/null and b/src/assets/images/og/0f419efebc260a2e6af18a62a9b8391bc5dccfa31eef59487c66991843b36454.webp differ diff --git a/src/assets/images/og/16394ac4ad5b2779a7b35ccba9642a42af077f063f462d6ac67176de39ba027c.webp b/src/assets/images/og/16394ac4ad5b2779a7b35ccba9642a42af077f063f462d6ac67176de39ba027c.webp new file mode 100644 index 0000000..0d9cee9 Binary files /dev/null and b/src/assets/images/og/16394ac4ad5b2779a7b35ccba9642a42af077f063f462d6ac67176de39ba027c.webp differ diff --git a/src/assets/images/og/1a3f481596a6e1901e61fbb36a5f0b2743578bcb8661a2a364ec7e71b600df51.webp b/src/assets/images/og/1a3f481596a6e1901e61fbb36a5f0b2743578bcb8661a2a364ec7e71b600df51.webp new file mode 100644 index 0000000..e94e1ac Binary files /dev/null and b/src/assets/images/og/1a3f481596a6e1901e61fbb36a5f0b2743578bcb8661a2a364ec7e71b600df51.webp differ diff --git a/src/assets/images/og/247c2931b89066bd824a7abcddd12b200b920279687af8d30446ce848695ea94.webp b/src/assets/images/og/247c2931b89066bd824a7abcddd12b200b920279687af8d30446ce848695ea94.webp new file mode 100644 index 0000000..e9a4d8a Binary files /dev/null and b/src/assets/images/og/247c2931b89066bd824a7abcddd12b200b920279687af8d30446ce848695ea94.webp differ diff --git a/src/assets/images/og/24f8a3afe83361b38d83f61d8f2014ab6015336287d43a57277cfd96d4de018e.webp b/src/assets/images/og/24f8a3afe83361b38d83f61d8f2014ab6015336287d43a57277cfd96d4de018e.webp new file mode 100644 index 0000000..a1350f6 Binary files /dev/null and b/src/assets/images/og/24f8a3afe83361b38d83f61d8f2014ab6015336287d43a57277cfd96d4de018e.webp differ diff --git a/src/assets/images/og/27a72c9f20ac352267364a021ebebd8dfedfac133d8fed701594ccb4cca38aac.webp b/src/assets/images/og/27a72c9f20ac352267364a021ebebd8dfedfac133d8fed701594ccb4cca38aac.webp new file mode 100644 index 0000000..17ae874 Binary files /dev/null and b/src/assets/images/og/27a72c9f20ac352267364a021ebebd8dfedfac133d8fed701594ccb4cca38aac.webp differ diff --git a/src/assets/images/og/2c5a3cb973156ad298785b2cd8f681203ba6f8f0225e851ab24ff99263dcec19.webp b/src/assets/images/og/2c5a3cb973156ad298785b2cd8f681203ba6f8f0225e851ab24ff99263dcec19.webp new file mode 100644 index 0000000..4e3b980 Binary files /dev/null and b/src/assets/images/og/2c5a3cb973156ad298785b2cd8f681203ba6f8f0225e851ab24ff99263dcec19.webp differ diff --git a/src/assets/images/og/2edc0523914e2303b4e88897758a26ee478019ce1cd76459a83ac7d280d0a367.webp b/src/assets/images/og/2edc0523914e2303b4e88897758a26ee478019ce1cd76459a83ac7d280d0a367.webp new file mode 100644 index 0000000..0e16d57 Binary files /dev/null and b/src/assets/images/og/2edc0523914e2303b4e88897758a26ee478019ce1cd76459a83ac7d280d0a367.webp differ diff --git a/src/assets/images/og/3dc43d668f963c6d16da20887b75eacddd6758affbe55e0e412ccc51f9c53667.webp b/src/assets/images/og/3dc43d668f963c6d16da20887b75eacddd6758affbe55e0e412ccc51f9c53667.webp new file mode 100644 index 0000000..b42edb7 Binary files /dev/null and b/src/assets/images/og/3dc43d668f963c6d16da20887b75eacddd6758affbe55e0e412ccc51f9c53667.webp differ diff --git a/src/assets/images/og/42fd368bcd0abefaad13fcc3481116e4beaf87fc130339a09926b74debfdefde.webp b/src/assets/images/og/42fd368bcd0abefaad13fcc3481116e4beaf87fc130339a09926b74debfdefde.webp new file mode 100644 index 0000000..9cad445 Binary files /dev/null and b/src/assets/images/og/42fd368bcd0abefaad13fcc3481116e4beaf87fc130339a09926b74debfdefde.webp differ diff --git a/src/assets/images/og/43f6293291e297494bfeaccb9e5f89e133364ab3007d4396280a1d3bc990ff04.webp b/src/assets/images/og/43f6293291e297494bfeaccb9e5f89e133364ab3007d4396280a1d3bc990ff04.webp new file mode 100644 index 0000000..f3a11b2 Binary files /dev/null and b/src/assets/images/og/43f6293291e297494bfeaccb9e5f89e133364ab3007d4396280a1d3bc990ff04.webp differ diff --git a/src/assets/images/og/4c024ad2888468d1eb5e9970acb35f2c70973d208abed36413d747cf7adbc3c1.webp b/src/assets/images/og/4c024ad2888468d1eb5e9970acb35f2c70973d208abed36413d747cf7adbc3c1.webp new file mode 100644 index 0000000..cd21737 Binary files /dev/null and b/src/assets/images/og/4c024ad2888468d1eb5e9970acb35f2c70973d208abed36413d747cf7adbc3c1.webp differ diff --git a/src/assets/images/og/4e0cb445e4479b973666a728ce3e05fab036e872329f9a23b50600040814ec69.webp b/src/assets/images/og/4e0cb445e4479b973666a728ce3e05fab036e872329f9a23b50600040814ec69.webp new file mode 100644 index 0000000..a5f3688 Binary files /dev/null and b/src/assets/images/og/4e0cb445e4479b973666a728ce3e05fab036e872329f9a23b50600040814ec69.webp differ diff --git a/src/assets/images/og/6e26f296c13bb478b41d91d8032225ede5a0ad230d30811619f5414f55e4a02d.webp b/src/assets/images/og/6e26f296c13bb478b41d91d8032225ede5a0ad230d30811619f5414f55e4a02d.webp new file mode 100644 index 0000000..aeae225 Binary files /dev/null and b/src/assets/images/og/6e26f296c13bb478b41d91d8032225ede5a0ad230d30811619f5414f55e4a02d.webp differ diff --git a/src/assets/images/og/705f5c960c6219e4320663f6c20d3d879daaa6ec7db146d2af3ddf1b8b7376bc.webp b/src/assets/images/og/705f5c960c6219e4320663f6c20d3d879daaa6ec7db146d2af3ddf1b8b7376bc.webp new file mode 100644 index 0000000..3eaa3b6 Binary files /dev/null and b/src/assets/images/og/705f5c960c6219e4320663f6c20d3d879daaa6ec7db146d2af3ddf1b8b7376bc.webp differ diff --git a/src/assets/images/og/724f6c8714ee54b9d973a5dcd5828f37d09771747d442599d3f6157caea7f587.webp b/src/assets/images/og/724f6c8714ee54b9d973a5dcd5828f37d09771747d442599d3f6157caea7f587.webp new file mode 100644 index 0000000..1779587 Binary files /dev/null and b/src/assets/images/og/724f6c8714ee54b9d973a5dcd5828f37d09771747d442599d3f6157caea7f587.webp differ diff --git a/src/assets/images/og/7e8d474cf004e53470523d65c36c3e9a31ad54b93126e0c5e706ea11d2cb0316.webp b/src/assets/images/og/7e8d474cf004e53470523d65c36c3e9a31ad54b93126e0c5e706ea11d2cb0316.webp new file mode 100644 index 0000000..4f74111 Binary files /dev/null and b/src/assets/images/og/7e8d474cf004e53470523d65c36c3e9a31ad54b93126e0c5e706ea11d2cb0316.webp differ diff --git a/src/assets/images/og/829fcc2981bac730437ace80486e255f315ac4236eebc8b096c10ea33c60e376.webp b/src/assets/images/og/829fcc2981bac730437ace80486e255f315ac4236eebc8b096c10ea33c60e376.webp new file mode 100644 index 0000000..7b35c22 Binary files /dev/null and b/src/assets/images/og/829fcc2981bac730437ace80486e255f315ac4236eebc8b096c10ea33c60e376.webp differ diff --git a/src/assets/images/og/85ea6aa2050b35993890a6e2d9ee9a46847030606ca94fa858bb5e2819634b36.webp b/src/assets/images/og/85ea6aa2050b35993890a6e2d9ee9a46847030606ca94fa858bb5e2819634b36.webp new file mode 100644 index 0000000..98d1088 Binary files /dev/null and b/src/assets/images/og/85ea6aa2050b35993890a6e2d9ee9a46847030606ca94fa858bb5e2819634b36.webp differ diff --git a/src/assets/images/og/86c2f07ff522348f3837b418d32b681966514892936446d33969a9bf8aa5fdcf.webp b/src/assets/images/og/86c2f07ff522348f3837b418d32b681966514892936446d33969a9bf8aa5fdcf.webp new file mode 100644 index 0000000..8297eac Binary files /dev/null and b/src/assets/images/og/86c2f07ff522348f3837b418d32b681966514892936446d33969a9bf8aa5fdcf.webp differ diff --git a/src/assets/images/og/8b57c46edf4cdbc7b7a931bf443bd6349ad03c38058382af5dbc74348990cad2.webp b/src/assets/images/og/8b57c46edf4cdbc7b7a931bf443bd6349ad03c38058382af5dbc74348990cad2.webp new file mode 100644 index 0000000..50e8201 Binary files /dev/null and b/src/assets/images/og/8b57c46edf4cdbc7b7a931bf443bd6349ad03c38058382af5dbc74348990cad2.webp differ diff --git a/src/assets/images/og/91470d3b0fbdff6f4e84ee59d57574d0c4e18346d76cb31f8ac4753d8b2d917c.webp b/src/assets/images/og/91470d3b0fbdff6f4e84ee59d57574d0c4e18346d76cb31f8ac4753d8b2d917c.webp new file mode 100644 index 0000000..84bff49 Binary files /dev/null and b/src/assets/images/og/91470d3b0fbdff6f4e84ee59d57574d0c4e18346d76cb31f8ac4753d8b2d917c.webp differ diff --git a/src/assets/images/og/9b2957927dfb6ab057c4bd9ca2ee1edaa5dabe472db8a4b205a448ce86f320a0.webp b/src/assets/images/og/9b2957927dfb6ab057c4bd9ca2ee1edaa5dabe472db8a4b205a448ce86f320a0.webp new file mode 100644 index 0000000..d584d14 Binary files /dev/null and b/src/assets/images/og/9b2957927dfb6ab057c4bd9ca2ee1edaa5dabe472db8a4b205a448ce86f320a0.webp differ diff --git a/src/assets/images/og/ac2eca9c24a3bfb54a729bb4d61cd366bcbbf7ffaf2074cb79b715b2b4ae823a.webp b/src/assets/images/og/ac2eca9c24a3bfb54a729bb4d61cd366bcbbf7ffaf2074cb79b715b2b4ae823a.webp new file mode 100644 index 0000000..7b9ade8 Binary files /dev/null and b/src/assets/images/og/ac2eca9c24a3bfb54a729bb4d61cd366bcbbf7ffaf2074cb79b715b2b4ae823a.webp differ diff --git a/src/assets/images/og/af2812b7323c521468dc6821fe1c49d4634d75fab57542227edf58c8a6ff550f.webp b/src/assets/images/og/af2812b7323c521468dc6821fe1c49d4634d75fab57542227edf58c8a6ff550f.webp new file mode 100644 index 0000000..512efca Binary files /dev/null and b/src/assets/images/og/af2812b7323c521468dc6821fe1c49d4634d75fab57542227edf58c8a6ff550f.webp differ diff --git a/src/assets/images/og/afde66ebf8ce260f06657b2e399b015c7ca2c4ae17ce8925fbf3bfdb004aafff.webp b/src/assets/images/og/afde66ebf8ce260f06657b2e399b015c7ca2c4ae17ce8925fbf3bfdb004aafff.webp new file mode 100644 index 0000000..f52b4c9 Binary files /dev/null and b/src/assets/images/og/afde66ebf8ce260f06657b2e399b015c7ca2c4ae17ce8925fbf3bfdb004aafff.webp differ diff --git a/src/assets/images/og/b916bd8d98e58ae61d97350e1acd574eaf7ef56087dd84ada6e47b06de84f6ec.webp b/src/assets/images/og/b916bd8d98e58ae61d97350e1acd574eaf7ef56087dd84ada6e47b06de84f6ec.webp new file mode 100644 index 0000000..137288b Binary files /dev/null and b/src/assets/images/og/b916bd8d98e58ae61d97350e1acd574eaf7ef56087dd84ada6e47b06de84f6ec.webp differ diff --git a/src/assets/images/og/bc6b7c8e1658eea7339db4eabaf8fbea81ce2fb098a85551b6723a3a3b0572ad.webp b/src/assets/images/og/bc6b7c8e1658eea7339db4eabaf8fbea81ce2fb098a85551b6723a3a3b0572ad.webp new file mode 100644 index 0000000..3f98d62 Binary files /dev/null and b/src/assets/images/og/bc6b7c8e1658eea7339db4eabaf8fbea81ce2fb098a85551b6723a3a3b0572ad.webp differ diff --git a/src/assets/images/og/c3e335d33f0572883ac16f28f8020fc1994c3b21e04c5aac3ee9b6cc764739a9.webp b/src/assets/images/og/c3e335d33f0572883ac16f28f8020fc1994c3b21e04c5aac3ee9b6cc764739a9.webp new file mode 100644 index 0000000..07277a2 Binary files /dev/null and b/src/assets/images/og/c3e335d33f0572883ac16f28f8020fc1994c3b21e04c5aac3ee9b6cc764739a9.webp differ diff --git a/src/assets/images/og/c56a73f5a228a043523db319ca6283676a05300fccd8cbcc6da67b5d54a7b516.webp b/src/assets/images/og/c56a73f5a228a043523db319ca6283676a05300fccd8cbcc6da67b5d54a7b516.webp new file mode 100644 index 0000000..405da40 Binary files /dev/null and b/src/assets/images/og/c56a73f5a228a043523db319ca6283676a05300fccd8cbcc6da67b5d54a7b516.webp differ diff --git a/src/assets/images/og/cab2435916591944b8fdc2fa3f7594338535d3b441282c310c8bad110248d529.webp b/src/assets/images/og/cab2435916591944b8fdc2fa3f7594338535d3b441282c310c8bad110248d529.webp new file mode 100644 index 0000000..e0a9569 Binary files /dev/null and b/src/assets/images/og/cab2435916591944b8fdc2fa3f7594338535d3b441282c310c8bad110248d529.webp differ diff --git a/src/assets/images/og/d13f0242ea87d3b8b79493dba4fdf67a118077496965a5e10b6bcff50bc3463d.webp b/src/assets/images/og/d13f0242ea87d3b8b79493dba4fdf67a118077496965a5e10b6bcff50bc3463d.webp new file mode 100644 index 0000000..e7751d2 Binary files /dev/null and b/src/assets/images/og/d13f0242ea87d3b8b79493dba4fdf67a118077496965a5e10b6bcff50bc3463d.webp differ diff --git a/src/assets/images/og/d2b18d57c0a2450d3ac7058cc068b06756d8e710840ed7b61aa3f77b31b3a26a.webp b/src/assets/images/og/d2b18d57c0a2450d3ac7058cc068b06756d8e710840ed7b61aa3f77b31b3a26a.webp new file mode 100644 index 0000000..48be9b2 Binary files /dev/null and b/src/assets/images/og/d2b18d57c0a2450d3ac7058cc068b06756d8e710840ed7b61aa3f77b31b3a26a.webp differ diff --git a/src/assets/images/og/d2cbb7339394fa213d13898862456dd9a3298e0667d61fa4f83f928e14f911a4.webp b/src/assets/images/og/d2cbb7339394fa213d13898862456dd9a3298e0667d61fa4f83f928e14f911a4.webp new file mode 100644 index 0000000..6396a4e Binary files /dev/null and b/src/assets/images/og/d2cbb7339394fa213d13898862456dd9a3298e0667d61fa4f83f928e14f911a4.webp differ diff --git a/src/assets/images/og/d36ff7a4f01cbb1aafb8e1a78277ef0f7a0777c00914bc5081400acab6477838.webp b/src/assets/images/og/d36ff7a4f01cbb1aafb8e1a78277ef0f7a0777c00914bc5081400acab6477838.webp new file mode 100644 index 0000000..2bc300b Binary files /dev/null and b/src/assets/images/og/d36ff7a4f01cbb1aafb8e1a78277ef0f7a0777c00914bc5081400acab6477838.webp differ diff --git a/src/assets/images/og/d674bbe2f3aedb98d289e79f93e1c734d625f458d81259a220c53eda76de76e2.webp b/src/assets/images/og/d674bbe2f3aedb98d289e79f93e1c734d625f458d81259a220c53eda76de76e2.webp new file mode 100644 index 0000000..696bc64 Binary files /dev/null and b/src/assets/images/og/d674bbe2f3aedb98d289e79f93e1c734d625f458d81259a220c53eda76de76e2.webp differ diff --git a/src/assets/images/og/e68f5babe68f2cbfbf4a7f52190b812cb574e049651131f65045d093dc8d4264.webp b/src/assets/images/og/e68f5babe68f2cbfbf4a7f52190b812cb574e049651131f65045d093dc8d4264.webp new file mode 100644 index 0000000..90a2392 Binary files /dev/null and b/src/assets/images/og/e68f5babe68f2cbfbf4a7f52190b812cb574e049651131f65045d093dc8d4264.webp differ diff --git a/src/assets/images/og/e8520e245128d21e405531b3d0d0d065337c24bbd73ea0a87a55c1fb6405c1f3.webp b/src/assets/images/og/e8520e245128d21e405531b3d0d0d065337c24bbd73ea0a87a55c1fb6405c1f3.webp new file mode 100644 index 0000000..d64cae8 Binary files /dev/null and b/src/assets/images/og/e8520e245128d21e405531b3d0d0d065337c24bbd73ea0a87a55c1fb6405c1f3.webp differ diff --git a/src/assets/images/og/e8e06ddb5b9857fc5ae6d3b98b2917cae9d2a4b761e7dc9c8916b5ba5eff7f7d.webp b/src/assets/images/og/e8e06ddb5b9857fc5ae6d3b98b2917cae9d2a4b761e7dc9c8916b5ba5eff7f7d.webp new file mode 100644 index 0000000..8aa4a8a Binary files /dev/null and b/src/assets/images/og/e8e06ddb5b9857fc5ae6d3b98b2917cae9d2a4b761e7dc9c8916b5ba5eff7f7d.webp differ diff --git a/src/assets/images/og/f141055153efb89213d1b078f568762004d53dc03d335a20976717bca4150bf5.webp b/src/assets/images/og/f141055153efb89213d1b078f568762004d53dc03d335a20976717bca4150bf5.webp new file mode 100644 index 0000000..64b0cea Binary files /dev/null and b/src/assets/images/og/f141055153efb89213d1b078f568762004d53dc03d335a20976717bca4150bf5.webp differ diff --git a/src/assets/images/og/f350a53d0426106b4605bfd1f90a2719255b5de9fd8f4ab22e7fb53240e6aae2.webp b/src/assets/images/og/f350a53d0426106b4605bfd1f90a2719255b5de9fd8f4ab22e7fb53240e6aae2.webp new file mode 100644 index 0000000..939e3eb Binary files /dev/null and b/src/assets/images/og/f350a53d0426106b4605bfd1f90a2719255b5de9fd8f4ab22e7fb53240e6aae2.webp differ diff --git a/src/pages/api/og/[...path].ts b/src/pages/api/og/[...path].ts index 16e9383..3d3db19 100644 --- a/src/pages/api/og/[...path].ts +++ b/src/pages/api/og/[...path].ts @@ -1,4 +1,5 @@ import fs from "node:fs"; +import * as nodePath from "node:path"; import { getBlog } from "@/utils/getBlog"; import { getOgImage } from "@/utils/getOgImage"; import { hashStringToSHA256 } from "@/utils/hashStringToSHA256"; @@ -8,13 +9,19 @@ import type { GetStaticPaths, InferGetStaticPropsType, } from "astro"; +import urlJoin from "url-join"; const blog = await getBlog(); +const extension: "jpg" | "png" | "webp" | "avif" = "webp"; + +export function getOgImageSrc(origin: string, pathname: string) { + return urlJoin(origin, "api/og", `${pathname}.${extension}`) +} export const getStaticPaths = (async () => { const results = [...blog].map((post) => { const { collection, slug, data } = post; - const path = `${collection}/${slug}`; + const path = `${collection}/${slug}.${extension}`; return { params: { path }, props: { @@ -31,18 +38,13 @@ export const GET: APIRoute = async (context: APIContext) => { const { params, props } = context; const { path = "" } = params; const { title } = props as Props; - const post = blog.find((post) => `${post.collection}/${post.slug}` === path); + const post = blog.find((post) => `${post.collection}/${post.slug}.${extension}` === path); if (!post || !title) return new Response("Page not found", { status: 404 }); let imageBuffer: Buffer; const hash = await hashStringToSHA256(path); - const imageDir = "./src/assets/images/og"; - const extension: "jpg" | "png" | "webp" | "avif" = "webp"; - const imagePath = `${imageDir}/${hash}.${extension}`; - - if (!fs.existsSync(imageDir)) { - fs.mkdirSync(imageDir); - } + const dirPath = nodePath.join(process.cwd(), "src/assets/images/og"); + const imagePath = nodePath.join(dirPath, `${hash}.${extension}`); if (fs.existsSync(imagePath)) { imageBuffer = fs.readFileSync(imagePath); @@ -53,7 +55,10 @@ export const GET: APIRoute = async (context: APIContext) => { debug: import.meta.env.DEV, }); imageBuffer = result; - fs.writeFileSync(imagePath, imageBuffer); + + if (import.meta.env.PROD) { + fs.writeFileSync(imagePath, imageBuffer); + } } return new Response(imageBuffer); diff --git a/src/pages/blog/[...slug].astro b/src/pages/blog/[...slug].astro index 72a2d96..83f7428 100644 --- a/src/pages/blog/[...slug].astro +++ b/src/pages/blog/[...slug].astro @@ -8,7 +8,7 @@ import Toc from "@/components/ui/Toc/index.astro"; import Layout from "@/layouts/Layout.astro"; import { getBlog, getTocHierarchy } from "@/utils/getBlog"; import type { GetStaticPaths, InferGetStaticPropsType } from "astro"; -import urlJoin from "url-join"; +import { getOgImageSrc } from "@/pages/api/og/[...path]"; export const getStaticPaths = (async () => { const blog = await getBlog(); @@ -23,9 +23,8 @@ export const getStaticPaths = (async () => { type Props = InferGetStaticPropsType; const { post } = Astro.props as Props; -const { id, slug, body, collection, render, data } = post; -const place = `${collection}/${id}`; -const { title, description, tags, create, update, image, published, noindex } = +const { render, data } = post; +const { title, description, tags, create, update, image, noindex } = data; const lastModified = update || create; const date = lastModified.toLocaleDateString("ja-JP", { @@ -36,7 +35,8 @@ const date = lastModified.toLocaleDateString("ja-JP", { const isoDate = lastModified.toISOString(); const { Content, headings } = await render(); const toc = getTocHierarchy(headings); -const ogImage = urlJoin(Astro.url.origin, "/api/og/blog", slug); +const { origin, pathname } = Astro.url +const ogImage = getOgImageSrc(origin, pathname) export const components = { a: AstroLink, @@ -51,7 +51,7 @@ export const components = {

{title}

- {tags.length && ( + {!!tags.length && ( <> /
diff --git a/src/utils/feed.ts b/src/utils/feed.ts index fc510f7..2530086 100644 --- a/src/utils/feed.ts +++ b/src/utils/feed.ts @@ -1,8 +1,14 @@ +import fs from "node:fs"; import type { FeedItem } from "@/types/feed"; -import FeedJson from "../../.contents/feed.json"; + +if (!fs.existsSync("./.contents/feed.json")) { + fs.writeFileSync("./.contents/feed.json", "[]"); +} export function getFeedItems() { - const results: FeedItem[] = FeedJson; + const results: FeedItem[] = JSON.parse( + fs.readFileSync("./.contents/feed.json", { encoding: "utf-8" }), + ); return results; } diff --git a/src/utils/getEmbedImageSrc.ts b/src/utils/getEmbedImageSrc.ts index f43c32e..669bae0 100644 --- a/src/utils/getEmbedImageSrc.ts +++ b/src/utils/getEmbedImageSrc.ts @@ -15,24 +15,29 @@ const size = 400; // }) // } -if (!fs.existsSync("./.contents")) { - fs.mkdirSync("./.contents"); -} -if (!fs.existsSync("./.contents/external-image.json")) { - fs.writeFileSync("./.contents/external-image.json", "{}"); -} -const externalImageJson: Record = JSON.parse( - fs.readFileSync("./.contents/external-image.json", { encoding: "utf-8" }), -); +// if (!fs.existsSync("./.contents")) { +// fs.mkdirSync("./.contents"); +// } +// if (!fs.existsSync("./.contents/external-image.json")) { +// fs.writeFileSync("./.contents/external-image.json", "{}"); +// } +// const externalImageJson: Record = JSON.parse( +// fs.readFileSync("./.contents/external-image.json", { encoding: "utf-8" }), +// ); export async function getEmbedImageSrc(url: string) { - let src = ""; + let result = ""; + const hash = await hashStringToSHA256(url); + const generatedPath = path.join( + process.cwd(), + `src/assets/images/embed/${hash}.${extension}`, + ); + console.log("generatedPath:", generatedPath); + console.log("fs.existsSync(generatedPath):", fs.existsSync(generatedPath)); - if (externalImageJson[url]) { - src = externalImageJson[url]; - } else if (import.meta.env.PROD) { - const hash = await hashStringToSHA256(url); - const imagePath = path.join(publicPath, dir, `${hash}.${extension}`); + if (fs.existsSync(generatedPath)) { + result = generatedPath; + } else { const response = await fetch(url); if (!response.ok) { throw new Error( @@ -46,10 +51,35 @@ export async function getEmbedImageSrc(url: string) { quality, }) .toBuffer(); - fs.writeFileSync(imagePath, imageBuffer); - const result = `/assets/${hash}.${extension}`; - return result; - } else { - return url; + fs.writeFileSync(generatedPath, imageBuffer); + result = generatedPath; } + return result; + + // let src = ""; + + // if (externalImageJson[url]) { + // src = externalImageJson[url]; + // } else if (import.meta.env.PROD) { + // const hash = await hashStringToSHA256(url); + // const imagePath = path.join(publicPath, dir, `${hash}.${extension}`); + // const response = await fetch(url); + // if (!response.ok) { + // throw new Error( + // `Failed to fetch the image. Status code: ${response.status}`, + // ); + // } + // const buffer = await response.arrayBuffer(); + // const imageBuffer = await sharp(buffer) + // .resize(size) + // .toFormat(extension, { + // quality, + // }) + // .toBuffer(); + // fs.writeFileSync(imagePath, imageBuffer); + // const result = `/assets/${hash}.${extension}`; + // return result; + // } else { + // return url; + // } } diff --git a/src/utils/getSiteMetadata.ts b/src/utils/getSiteMetadata.ts index 417f678..ad0c083 100644 --- a/src/utils/getSiteMetadata.ts +++ b/src/utils/getSiteMetadata.ts @@ -1,21 +1,16 @@ import fs from "node:fs"; import type { CardLinkEmbedType } from "@/types/oembed"; import fetchSiteMetadata from "fetch-site-metadata"; -import { getEmbedImageSrc } from "./getEmbedImageSrc"; const dir = "./.contents"; const jsonPath = `${dir}/card-links.json`; -if (!fs.existsSync(dir)) { - fs.mkdirSync(dir); -} if (!fs.existsSync(jsonPath)) { fs.writeFileSync(jsonPath, JSON.stringify({}, null, 2)); } -const jsonString = fs.readFileSync("./.contents/card-links.json", { - encoding: "utf-8", -}); -const linksJson: Record = JSON.parse(jsonString); +const linksJson: Record = JSON.parse( + fs.readFileSync("./.contents/card-links.json", { encoding: "utf-8" }), +); export async function getSiteMetadata(url: string) { let result: CardLinkEmbedType; @@ -28,7 +23,6 @@ export async function getSiteMetadata(url: string) { image, }; } else { - console.log("now fetching site metadata..."); const { title = "", description = "", @@ -46,10 +40,6 @@ export async function getSiteMetadata(url: string) { } } - // if(result.image){ - // const hoge = await getEmbedImageSrc(result.image) - // } - return { src: url, ...result, diff --git a/src/utils/github/getUserContent.ts b/src/utils/github/getUserContent.ts index 5490a88..2e16ab1 100644 --- a/src/utils/github/getUserContent.ts +++ b/src/utils/github/getUserContent.ts @@ -1,15 +1,31 @@ +import fs from "node:fs"; import type { UserContent } from "@/types/github"; -import contributionsJson from "../../../.contents/contributions.json"; -import repositoryJson from "../../../.contents/repository.json"; +import type { ContributionsCollection } from "@octokit/graphql-schema"; + +const repositoryJsonPath = "./.contents/repository.json"; +const contributionsJsonPath = "./.contents/contributions.json"; + +if (!fs.existsSync(contributionsJsonPath)) { + fs.writeFileSync(contributionsJsonPath, "{}"); +} + +if (!fs.existsSync(repositoryJsonPath)) { + fs.writeFileSync(repositoryJsonPath, "[]"); +} export function getUserContent(): UserContent { + const repositoryJson: UserContent["repositoryItems"] = JSON.parse( + fs.readFileSync(repositoryJsonPath, { encoding: "utf-8" }), + ); + const contributionsJson: Pick< + ContributionsCollection, + "contributionCalendar" + > = JSON.parse(fs.readFileSync(contributionsJsonPath, { encoding: "utf-8" })); + const repositoryItems: UserContent["repositoryItems"] = repositoryJson.filter( (repo) => !repo.isFork, ); - const { contributionCalendar } = contributionsJson as unknown as Pick< - UserContent, - "contributionCalendar" - >; + const { contributionCalendar } = contributionsJson; return { repositoryItems,