diff --git a/package.json b/package.json index 7967893..b3f7584 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,8 @@ "articles": "deno run --allow-all utils/articles.js", "talks": "deno run --allow-all utils/talks.js", "explorer": "deno run --allow-all utils/explorer.js", - "sync-all": "npm run core && npm run contribs && npm run articles && npm run talks && npm run explorer" + "events-ext": "deno run --allow-all utils/events-ext.js", + "sync-all": "npm run core && npm run contribs && npm run articles && npm run talks && npm run explorer && npm run events-ext" }, "dependencies": { "@astrojs/tailwind": "^5.0.2", diff --git a/src/components/EventItem.astro b/src/components/EventItem.astro index f53af0b..2bb72d2 100644 --- a/src/components/EventItem.astro +++ b/src/components/EventItem.astro @@ -2,6 +2,23 @@ const { item } = Astro.props; import { format, compareAsc, addDays, isFuture } from 'date-fns'; import { marked } from 'marked'; +import EventsExt from '../events-ext.json'; + +function findExt () { + let slug = null + if (item.links?.web && item.links.web.match(/^https:\/\/lu.ma\//)) { + slug = item.links.web.match(/^https:\/\/lu.ma\/(.+)$/)[1] + } + if (item.links?.rsvp && item.links.rsvp.match(/^https:\/\/lu.ma\//)) { + slug = item.links.rsvp.match(/^https:\/\/lu.ma\/(.+)$/)[1] + } + if (!slug) { + return null + } + return EventsExt.find(ex => ex.url === slug) +} + +const ext = findExt() const isDate = item.date.match(/^\d{4}-\d{2}-\d{2}$/) const future = isDate && !isFuture(new Date(item.date)); @@ -102,6 +119,13 @@ const status = item.confirmed
+ {ext && +
+ {ext.guests.map((guest) => ( +
+ ))} +
+ } {/*
*/} {item.links?.rsvp && diff --git a/src/events-ext.json b/src/events-ext.json new file mode 100644 index 0000000..df5e98b --- /dev/null +++ b/src/events-ext.json @@ -0,0 +1,293 @@ +[ + { + "url": "w3pn-meetup-bucharest1", + "name": "W3PN Meetup @ ETHBucharest 2024", + "period": [ + "2024-03-28T13:00:00.000Z", + "2024-03-28T19:00:00.000Z" + ], + "coverUrl": "https://images.lumacdn.com/event-covers/pq/73637b17-538e-44fa-a75a-5da505ba9d47", + "guestCount": 3, + "guests": [ + { + "name": "tree", + "avatarUrl": "https://cdn.lu.ma/avatars/39/1bf939a4-c139-4008-96d8-ad5f729d94c3" + }, + { + "name": "RSSC No1", + "avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_39.png" + }, + { + "name": "bryce_gabari", + "avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_18.png" + } + ] + }, + { + "url": "w3pn-meetup-ams1", + "name": "W3PN Meetup @ ETHDam 2024", + "period": [ + "2024-04-11T13:00:00.000Z", + "2024-04-11T19:00:00.000Z" + ], + "coverUrl": "https://images.lumacdn.com/event-covers/pq/73637b17-538e-44fa-a75a-5da505ba9d47", + "guestCount": 12, + "guests": [ + { + "name": "Lanaryx", + "avatarUrl": "https://images.lumacdn.com/avatars/fu/355e98ad-8cdc-4e6a-8066-96fd9c505f24" + }, + { + "name": "Alina Latinina", + "avatarUrl": "https://images.lumacdn.com/avatars/1x/73d8754f-c813-4603-90cd-a1233e12eb1a" + }, + { + "name": "Kieran Mesquita", + "avatarUrl": "https://images.lumacdn.com/avatars/0c/b0ba4716-d35b-48b3-9523-62242e583013" + }, + { + "name": "Dietrich Ayala", + "avatarUrl": "https://cdn.lu.ma/avatars/yx/da86d2b5-aa0e-4c77-8f06-eda042415b2c" + }, + { + "name": "limone.eth", + "avatarUrl": "https://cdn.lu.ma/avatars/zo/9b09a4b5-59b6-47cd-b988-32ed7f22dc1e" + }, + { + "name": "tree", + "avatarUrl": "https://cdn.lu.ma/avatars/39/1bf939a4-c139-4008-96d8-ad5f729d94c3" + }, + { + "name": "Jacob Czepluch", + "avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_13.png" + }, + { + "name": "HW", + "avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_19.png" + }, + { + "name": "Who?", + "avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_24.png" + }, + { + "name": "bryce_gabari", + "avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_18.png" + } + ] + }, + { + "url": "w3pn-meetup-tallinn1", + "name": "W3PN Meetup @ ETHTallinn 2024", + "period": [ + "2024-04-18T12:00:00.000Z", + "2024-04-18T18:00:00.000Z" + ], + "coverUrl": "https://images.lumacdn.com/event-covers/pq/73637b17-538e-44fa-a75a-5da505ba9d47", + "guestCount": 4, + "guests": [ + { + "name": "Sander Gansen", + "avatarUrl": "https://images.lumacdn.com/avatars/n9/3185a69c-8877-44a2-a3bd-d8ca324dae8d" + }, + { + "name": "tree", + "avatarUrl": "https://cdn.lu.ma/avatars/39/1bf939a4-c139-4008-96d8-ad5f729d94c3" + }, + { + "name": "HW", + "avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_19.png" + }, + { + "name": "Ashton Barger", + "avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_29.png" + } + ] + }, + { + "url": "w3pn-meetup-berlin1", + "name": "W3PN Meetup @ ETHBerlin 4", + "period": [ + "2024-05-22T13:00:00.000Z", + "2024-05-22T19:00:00.000Z" + ], + "coverUrl": "https://images.lumacdn.com/event-covers/pq/73637b17-538e-44fa-a75a-5da505ba9d47", + "guestCount": 7, + "guests": [ + { + "name": "will scott", + "avatarUrl": "https://cdn.lu.ma/avatars/66/778a15b0-1e8b-4c45-9011-f3d19dd7cc90" + }, + { + "name": "tree", + "avatarUrl": "https://cdn.lu.ma/avatars/39/1bf939a4-c139-4008-96d8-ad5f729d94c3" + }, + { + "name": "Orion", + "avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_16.png" + }, + { + "name": "alex v", + "avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_37.png" + }, + { + "name": "Elena Grafenhorst", + "avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_38.png" + }, + { + "name": "Jacob Czepluch", + "avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_13.png" + }, + { + "name": "bryce_gabari", + "avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_18.png" + } + ] + }, + { + "url": "w3pn-summit-prague2", + "name": "W3PN Summit @ ETHPrague 2024", + "period": [ + "2024-05-30T07:00:00.000Z", + "2024-05-31T02:00:00.000Z" + ], + "coverUrl": "https://images.lumacdn.com/event-covers/pq/73637b17-538e-44fa-a75a-5da505ba9d47", + "guestCount": 4, + "guests": [ + { + "name": "Ashoat Tevosyan", + "avatarUrl": "https://cdn.lu.ma/avatars/b1/66f83394-ad58-4848-8c29-292cac308fa1" + }, + { + "name": "tree", + "avatarUrl": "https://cdn.lu.ma/avatars/39/1bf939a4-c139-4008-96d8-ad5f729d94c3" + }, + { + "name": "HW", + "avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_19.png" + }, + { + "name": "bryce_gabari", + "avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_18.png" + } + ] + }, + { + "url": "w3pn-bled-hackathon1", + "name": "W3PN Hackathon @ Bled", + "period": [ + "2024-06-19T13:00:00.000Z", + "2024-06-26T13:00:00.000Z" + ], + "coverUrl": "https://images.lumacdn.com/event-covers/pq/73637b17-538e-44fa-a75a-5da505ba9d47", + "guestCount": 0, + "guests": [] + }, + { + "url": "w3pn-meetup-ljubljana1", + "name": "W3PN Meetup @ Ljubljana", + "period": [ + "2024-06-21T13:00:00.000Z", + "2024-06-21T19:00:00.000Z" + ], + "coverUrl": "https://images.lumacdn.com/event-covers/pq/73637b17-538e-44fa-a75a-5da505ba9d47", + "guestCount": 2, + "guests": [ + { + "name": "tree", + "avatarUrl": "https://cdn.lu.ma/avatars/39/1bf939a4-c139-4008-96d8-ad5f729d94c3" + }, + { + "name": "bryce_gabari", + "avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_18.png" + } + ] + }, + { + "url": "w3pn-meetup-bru1", + "name": "W3PN Meetup @ EthCC 7", + "period": [ + "2024-07-12T13:00:00.000Z", + "2024-07-12T19:00:00.000Z" + ], + "coverUrl": "https://images.lumacdn.com/event-covers/pq/73637b17-538e-44fa-a75a-5da505ba9d47", + "guestCount": 2, + "guests": [ + { + "name": "tree", + "avatarUrl": "https://cdn.lu.ma/avatars/39/1bf939a4-c139-4008-96d8-ad5f729d94c3" + }, + { + "name": "bryce_gabari", + "avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_18.png" + } + ] + }, + { + "url": "w3pn-meetup-rome1", + "name": "W3PN Meetup @ ETHRome 2024", + "period": [ + "2024-10-03T13:00:00.000Z", + "2024-10-03T19:00:00.000Z" + ], + "coverUrl": "https://images.lumacdn.com/event-covers/pq/73637b17-538e-44fa-a75a-5da505ba9d47", + "guestCount": 2, + "guests": [ + { + "name": "tree", + "avatarUrl": "https://cdn.lu.ma/avatars/39/1bf939a4-c139-4008-96d8-ad5f729d94c3" + }, + { + "name": "bryce_gabari", + "avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_18.png" + } + ] + }, + { + "url": "w3pn-summit-brno1", + "name": "W3PN Summit @ ETHBrno 2024", + "period": [ + "2024-10-24T07:00:00.000Z", + "2024-10-25T02:00:00.000Z" + ], + "coverUrl": "https://images.lumacdn.com/event-covers/pq/73637b17-538e-44fa-a75a-5da505ba9d47", + "guestCount": 2, + "guests": [ + { + "name": "tree", + "avatarUrl": "https://cdn.lu.ma/avatars/39/1bf939a4-c139-4008-96d8-ad5f729d94c3" + }, + { + "name": "bryce_gabari", + "avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_18.png" + } + ] + }, + { + "url": "w3pn-meetup-devcon7", + "name": "W3PN Meetup @ Devcon 7", + "period": [ + "2024-11-11T08:00:00.000Z", + "2024-11-11T14:00:00.000Z" + ], + "coverUrl": "https://images.lumacdn.com/event-covers/pq/73637b17-538e-44fa-a75a-5da505ba9d47", + "guestCount": 4, + "guests": [ + { + "name": "tree", + "avatarUrl": "https://cdn.lu.ma/avatars/39/1bf939a4-c139-4008-96d8-ad5f729d94c3" + }, + { + "name": "Orion", + "avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_16.png" + }, + { + "name": "vincent", + "avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_40.png" + }, + { + "name": "bryce_gabari", + "avatarUrl": "https://cdn.lu.ma/avatars-default/avatar_18.png" + } + ] + } +] \ No newline at end of file diff --git a/utils/events-ext.js b/utils/events-ext.js new file mode 100644 index 0000000..30f2b79 --- /dev/null +++ b/utils/events-ext.js @@ -0,0 +1,35 @@ +import { parseFeed } from "https://deno.land/x/rss/mod.ts"; +import * as cheerio from "https://esm.sh/cheerio@1.0.0-rc.12"; + +const resp = await fetch("https://lu.ma/web3privacy"); +const html = await resp.text(); +const $ = cheerio.load(html); + +const dataRaw = $("script#__NEXT_DATA__").text(); +const data = JSON.parse(dataRaw); +const calendar = data.props.pageProps.initialData.data.calendar; + +const items = data.props.pageProps.initialData.data.featured_items; + +const output = []; +for (const item of items) { + const evt = item.event; + output.push({ + url: evt.url, + name: evt.name, + period: [evt.start_at, evt.end_at], + coverUrl: evt.cover_url, + guestCount: item.guest_count, + guests: item.featured_guests.map((fg) => ({ + name: fg.name, + avatarUrl: fg.avatar_url, + })), + }); + //console.log(item); +} + +await Deno.writeTextFile( + "./src/events-ext.json", + JSON.stringify(output, null, 2), +); +console.log(`File ./src/events-ext.json saved`);