whatsappWebhookExamplemain.tsx2 matches
2* Simple, free webhook to start using WhatsApp Platform.
3* Handles GET request for verification, and POST request for notifications.
4* Meta example: https://glitch.com/edit/#!/whatsapp-cloud-api-echo-bot
5*
6* Setup:
9* 2. Set your env variable `WHATSAPP_WEBHOOK_VERIFY_TOKEN`
10* Set env variables in val: https://docs.val.town/reference/environment-variables/
11* hub.verify_token value: https://developers.facebook.com/docs/graph-api/webhooks/getting-started
12*
13* Note:
todaystatsmain.tsx12 matches
1/**
2* This tool fetches real-time data from various free APIs to create a JSON object
3* representing the current state of the world from different perspectives.
4* Data is cached for 30 minutes using Val Town's SQLite database to reduce API calls and improve performance.
5*/
643async function fetchWolframData(query: string) {
44const appId = 'K8UTGR-8Y5G3A3VTP';
45const url = `http://api.wolframalpha.com/v1/result?appid=${appId}&i=${encodeURIComponent(query)}`;
46try {
47const response = await fetch(url);
58// Utility function for fetching Alpha Vantage stock data
59async function fetchStockData(symbol: string) {
60const apiKey = 'TD7I78XY3N2AGKWP';
61const url = `https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&symbol=${symbol}&interval=5min&apikey=${apiKey}`;
62try {
63const data = await fetchJSON(url);
9192// If no valid cache, fetch new data
93const issData = await fetchJSON('http://api.open-notify.org/iss-now.json');
94const weatherData = await fetchJSON('https://api.open-meteo.com/v1/forecast?latitude=40.71&longitude=-74.01¤t_weather=true&temperature_unit=celsius&daily=temperature_2m_max,temperature_2m_min,sunrise,sunset&timezone=America%2FNew_York');
95const airQualityData = await fetchJSON('https://api.waqi.info/feed/geo:40.71;-74.01/?token=demo');
96const cryptoData = await fetchJSON('https://api.coingecko.com/api/v3/simple/price?ids=bitcoin,ethereum,dogecoin,ripple,cardano,polkadot,litecoin&vs_currencies=usd');
97const peopleInSpaceData = await fetchJSON('http://api.open-notify.org/astros.json');
98const timeData = await fetchJSON('https://worldtimeapi.org/api/timezone/America/New_York,Europe/London,Asia/Tokyo');
99const exchangeRateData = await fetchJSON('https://api.exchangerate-api.com/v4/latest/USD');
100const usaCovidData = await fetchJSON('https://disease.sh/v3/covid-19/countries/USA');
101const solarData = await fetchJSON('https://services.swpc.noaa.gov/json/solar-cycle/observed-solar-cycle-indices.json');
1/**
2* This program creates an HTTP server that fetches various data from NASA APIs
3* and returns a JSON response with a collection of interesting information about today.
4* It uses multiple NASA APIs to gather diverse space-related data, including real-time imagery
5* and additional interesting data points.
6*/
8import { DOMParser } from "https://esm.sh/linkedom";
910const NASA_API_KEY = 'vYg1cCNLVbcgNemMWuLEjoJsGOGbBXZjZjmwVwuV';
1112async function fetchNASAData() {
1415// Fetch Astronomy Picture of the Day
16const apodResponse = await fetch(`https://api.nasa.gov/planetary/apod?api_key=${NASA_API_KEY}`);
17const apodData = await apodResponse.json();
1819// Fetch latest EPIC image metadata
20const epicResponse = await fetch(`https://api.nasa.gov/EPIC/api/natural?api_key=${NASA_API_KEY}`);
21const epicData = await epicResponse.json();
22const latestEpicImage = epicData[0];
2324// Fetch Near Earth Objects for today
25const neowsResponse = await fetch(`https://api.nasa.gov/neo/rest/v1/feed?start_date=${today}&end_date=${today}&api_key=${NASA_API_KEY}`);
26const neowsData = await neowsResponse.json();
2728// Fetch Mars Weather data (note: this data is not always up-to-date)
29const marsWeatherResponse = await fetch(`https://api.nasa.gov/insight_weather/?api_key=${NASA_API_KEY}&feedtype=json&ver=1.0`);
30const marsWeatherData = await marsWeatherResponse.json();
3132// Fetch Earth Observatory Natural Event Tracker (EONET) data
33const eonetResponse = await fetch(`https://eonet.gsfc.nasa.gov/api/v3/events`);
34const eonetData = await eonetResponse.json();
3536// Fetch ISS Current Location
37const issResponse = await fetch('http://api.open-notify.org/iss-now.json');
38const issData = await issResponse.json();
3940// Fetch NASA Image and Video Library data
41const nasaLibraryResponse = await fetch(`https://images-api.nasa.gov/search?q=space&media_type=image`);
42const nasaLibraryData = await nasaLibraryResponse.json();
43
451. Click `Fork`
62. Change `location` (Line 4) to describe your location. It accepts fairly flexible English descriptions which it turns into locations via [nominatim's geocoder API](https://www.val.town/v/stevekrouse/nominatimSearch).
73. Click `Run`
8
sqliteExplorerAppREADME.md1 match
13## Authentication
1415Login to your SQLite Explorer with [password authentication](https://www.val.town/v/pomdtr/password_auth) with your [Val Town API Token](https://www.val.town/settings/api) as the password.
1617## Todos / Plans
sqliteExplorerAppmain.tsx2 matches
27<head>
28<title>SQLite Explorer</title>
29<link rel="preconnect" href="https://fonts.googleapis.com" />
3031<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
32<link
33href="https://fonts.googleapis.com/css2?family=Fira+Code:wght@300..700&family=Source+Sans+3:ital,wght@0,200..900;1,200..900&display=swap"
34rel="stylesheet"
35/>
54You can attach files to your emails by using the `attachments` field.
55Attachments need to be [Base64](https://en.wikipedia.org/wiki/Base64) encoded,
56which is that the [btoa](https://developer.mozilla.org/en-US/docs/Web/API/btoa)
57method is doing in this example:
58
1import { API_URL } from "https://esm.town/v/std/API_URL";
2import { parseSendGridEmail } from "https://esm.town/v/stevekrouse/parseSendGridEmail?v=8";
3import { parseSendGridEmails } from "https://esm.town/v/stevekrouse/parseSendGridEmails?v=10";
69}) => {
70let result = await fetch(
71`${API_URL}/v1/email`,
72{
73method: "POST",
reluctantCoffeeGayalmain.tsx9 matches
49const fetchAnswersAndRankings = async () => {
50if (user) {
51const response = await fetch("/api/answers");
52const data = await response.json();
53setAnswers(data.answers);
59const saveAnswer = useCallback(async (newAnswer: Answer, losingAnswer: string) => {
60if (user) {
61await fetch("/api/answer", {
62method: "POST",
63headers: { "Content-Type": "application/json" },
70const clearAnswers = useCallback(async () => {
71if (user) {
72await fetch("/api/clear-answers", { method: "POST" });
73setAnswers([]);
74setRankings([]);
242const handleLogin = useCallback(async (e: React.FormEvent) => {
243e.preventDefault();
244const response = await fetch("/api/login", {
245method: "POST",
246headers: { "Content-Type": "application/json" },
314315const url = new URL(request.url);
316if (url.pathname === "/api/login") {
317const { username } = await request.json();
318await sqlite.execute(`INSERT OR IGNORE INTO ${KEY}_users (username) VALUES (?)`, [username]);
321}
322323if (url.pathname === "/api/answer") {
324const { questionId, answer, losingAnswer } = await request.json();
325const userId = 1; // In a real app, you'd get this from the session
333}
334335if (url.pathname === "/api/answers") {
336const userId = 1; // In a real app, you'd get this from the session
337const answers = (await sqlite.execute(`SELECT * FROM ${KEY}_answers WHERE user_id = ?`, [userId])).rows;
340}
341342if (url.pathname === "/api/clear-answers") {
343const userId = 1; // In a real app, you'd get this from the session
344await sqlite.execute(`DELETE FROM ${KEY}_answers WHERE user_id = ?`, [userId]);
411412const css = `
413@import url('https://fonts.googleapis.com/css2?family=Pacifico&family=Roboto:wght@300;400;500&display=swap');
414415:root {
fancyPlumSquirrelmain.tsx2 matches
1/**
2* This val creates an elegant and professional web app for managing panel members for the State Street discussion.
3* It uses React for the UI, SQLite for storing panel member information, and the Fetch API to communicate with the server.
4* The design is clean and sophisticated, with a muted color palette and subtle animations.
5*/
182183const css = `
184@import url('https://fonts.googleapis.com/css2?family=Playfair+Display:wght@400;700&family=Roboto:wght@300;400;700&display=swap');
185186:root {