-
-
Save mdixon4/3701a38b0ba9b0c5f1087de2f20afe2d to your computer and use it in GitHub Desktop.
Upload image to geohashing.site
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { wrapFetch } from 'https://deno.land/x/another_cookiejar@v4.1.6/mod.ts' | |
const API_URL = 'https://geohashing.site/api.php' | |
const USERNAME = '' | |
const PASSWORD = '' | |
// Wrap fetch with a cookie jar. | |
const fetch = wrapFetch() | |
await login(USERNAME, PASSWORD) | |
// await getEditToken() | |
await uploadImage( | |
'2022-12-30_-38_146_mdixon4.jpg', | |
`[[Category: Meetup on 2022-12-30]] | |
[[Category: Meetup in -38 146]] | |
Uploaded by mdixon4's bot.` | |
) | |
////////////////////////////// | |
async function uploadImage(pathToImage, comment) { | |
console.log('Uploading', pathToImage) | |
const filename = pathToImage.split('/').pop() | |
const imageFileData = Deno.readFileSync(pathToImage) | |
const csrfToken = await getCsrfToken() | |
const params = new URLSearchParams() | |
params.append('action', 'upload') | |
params.append('format', 'json') | |
// params.append('token', csrfToken) | |
const formData = new FormData() | |
formData.append('token', csrfToken) | |
formData.append('filename', filename) | |
formData.append('comment', comment) | |
formData.append('file', imageFileData, { | |
filename, | |
type: 'image/jpg', | |
name: 'file', | |
}) | |
// Make the request. | |
const response = await fetch(API_URL + '?' + params.toString(), { | |
method: 'POST', | |
body: formData, | |
headers: { | |
'Content-Type': 'multipart/form-data', | |
}, | |
}) | |
console.log(await response.json()) | |
} | |
async function getLoginToken() { | |
console.log('Retrieving login token...') | |
const params = new URLSearchParams() | |
params.append('action', 'query') | |
params.append('meta', 'tokens') | |
params.append('type', 'login') | |
params.append('format', 'json') | |
const resp = await fetch(API_URL + '?' + params.toString()) | |
const loginToken = (await resp.json()).query.tokens.logintoken | |
console.log('Login token:', loginToken) | |
return loginToken | |
} | |
async function getCsrfToken() { | |
console.log('Retrieving CSRF token...') | |
const params = new URLSearchParams() | |
params.append('action', 'query') | |
params.append('meta', 'tokens') | |
params.append('format', 'json') | |
const resp = await fetch(API_URL + '?' + params.toString()) | |
const csrfToken = (await resp.json()).query.tokens.csrftoken | |
console.log('CSRF token:', csrfToken) | |
return csrfToken | |
} | |
async function login(username, password) { | |
console.log('Logging in...') | |
const params = new URLSearchParams() | |
params.append('action', 'login') | |
params.append('lgname', username) | |
params.append('lgpassword', password) | |
params.append('lgtoken', await getLoginToken()) | |
params.append('format', 'json') | |
const resp = await fetch(API_URL, { | |
method: 'POST', | |
body: params, | |
}) | |
const data = await resp.json() | |
if (data.login.result === 'Success') { | |
console.log('Login successful!') | |
} else { | |
console.log(data.login) | |
throw new Error('Login failed!') | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment