mirror of
https://git.sr.ht/~cadence/bibliogram
synced 2024-11-22 16:17:29 +00:00
Blocked by Instagram.
This commit is contained in:
parent
a5ab771969
commit
e2fba3bbd0
@ -55,7 +55,7 @@ class TtlCache {
|
||||
*/
|
||||
getTtl(key, factor = 1) {
|
||||
if (this.has(key)) {
|
||||
return Math.max((Math.floor(Date.now() - this.cache.get(key).time) / factor), 0)
|
||||
return Math.max(Math.ceil((this.cache.get(key).time + this.ttl - Date.now()) / factor), 0)
|
||||
} else {
|
||||
return null
|
||||
}
|
||||
|
@ -11,7 +11,8 @@ const timelineEntryCache = new TtlCache(constants.caching.resource_cache_time)
|
||||
function fetchUser(username) {
|
||||
return requestCache.getOrFetch("user/"+username, () => {
|
||||
return request(`https://www.instagram.com/${username}/`).then(res => {
|
||||
if (res.status === 404) throw constants.symbols.NOT_FOUND
|
||||
if (res.status === 302) throw constants.symbols.INSTAGRAM_DEMANDS_LOGIN
|
||||
else if (res.status === 404) throw constants.symbols.NOT_FOUND
|
||||
else return res.text().then(text => {
|
||||
// require down here or have to deal with require loop. require cache will take care of it anyway.
|
||||
// User -> Timeline -> TimelineImage -> collectors -/> User
|
||||
|
@ -37,7 +37,8 @@ let constants = {
|
||||
TYPE_GALLERY_IMAGE: Symbol("TYPE_GALLERY_IMAGE"),
|
||||
TYPE_GALLERY_VIDEO: Symbol("TYPE_GALLERY_VIDEO"),
|
||||
NOT_FOUND: Symbol("NOT_FOUND"),
|
||||
NO_SHARED_DATA: Symbol("NO_SHARED_DATA")
|
||||
NO_SHARED_DATA: Symbol("NO_SHARED_DATA"),
|
||||
INSTAGRAM_DEMANDS_LOGIN: Symbol("INSTAGRAM_DEMANDS_LOGIN")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5,7 +5,8 @@ function request(url) {
|
||||
return fetch(url, {
|
||||
headers: {
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"
|
||||
}
|
||||
},
|
||||
redirect: "manual"
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
const constants = require("../../lib/constants")
|
||||
const {fetchUser, getOrFetchShortcode} = require("../../lib/collectors")
|
||||
const {fetchUser, getOrFetchShortcode, requestCache} = require("../../lib/collectors")
|
||||
const {render, redirect} = require("pinski/plugins")
|
||||
const {pugCache} = require("../passthrough")
|
||||
|
||||
module.exports = [
|
||||
{
|
||||
@ -37,6 +38,17 @@ module.exports = [
|
||||
title: "Not found",
|
||||
message: "This user doesn't exist."
|
||||
})
|
||||
} else if (error === constants.symbols.INSTAGRAM_DEMANDS_LOGIN) {
|
||||
return {
|
||||
statusCode: 503,
|
||||
contentType: "text/html",
|
||||
headers: {
|
||||
"Retry-After": requestCache.getTtl("user/"+fill[0], 1000)
|
||||
},
|
||||
content: pugCache.get("pug/blocked.pug").web({
|
||||
expiresMinutes: requestCache.getTtl("user/"+fill[0], 1000*60)
|
||||
})
|
||||
}
|
||||
} else {
|
||||
throw error
|
||||
}
|
||||
|
19
src/site/pug/blocked.pug
Normal file
19
src/site/pug/blocked.pug
Normal file
@ -0,0 +1,19 @@
|
||||
//- Needs expiresMinutes, instancesURL
|
||||
|
||||
include includes/error.pug
|
||||
|
||||
- const numberFormat = new Intl.NumberFormat().format
|
||||
|
||||
doctype html
|
||||
html
|
||||
head
|
||||
meta(charset="utf-8")
|
||||
meta(name="viewport" content="width=device-width, initial-scale=1")
|
||||
title= `Blocked | Bibliogram`
|
||||
link(rel="stylesheet" type="text/css" href="/static/css/main.css")
|
||||
body.error-page
|
||||
+error(503, "Blocked by Instagram")
|
||||
| Instagram is refusing to provide data to this server. Try again later to see if the block has been lifted.
|
||||
| This error has been cached. The internal cache will expire in #{expiresMinutes} minutes.
|
||||
|
|
||||
a(href="https://github.com/cloudrac3r/bibliogram/wiki/Instances") You could try browsing Bibliogram on another instance.
|
@ -1,7 +1,6 @@
|
||||
//- Needs title, message, statusCode
|
||||
//- Needs title, message, statusCode ?explanation
|
||||
|
||||
include includes/timeline_page.pug
|
||||
include includes/next_page_button.pug
|
||||
include includes/error.pug
|
||||
|
||||
- const numberFormat = new Intl.NumberFormat().format
|
||||
|
||||
@ -13,8 +12,6 @@ html
|
||||
title= `${title} | Bibliogram`
|
||||
link(rel="stylesheet" type="text/css" href="/static/css/main.css")
|
||||
body.error-page
|
||||
h1.code= statusCode
|
||||
p.message= message
|
||||
if explanation
|
||||
p.explanation= explanation
|
||||
a(href="javascript:history.back()").back ← Go back?
|
||||
+error(statusCode, message)
|
||||
if explanation
|
||||
=explanation
|
||||
|
7
src/site/pug/includes/error.pug
Normal file
7
src/site/pug/includes/error.pug
Normal file
@ -0,0 +1,7 @@
|
||||
mixin error(statusCode, message)
|
||||
h1.code= statusCode
|
||||
p.message= message
|
||||
if block
|
||||
p.explanation
|
||||
block
|
||||
a(href="javascript:history.back()").back ← Go back?
|
@ -295,6 +295,9 @@ body
|
||||
justify-content: center
|
||||
align-items: center
|
||||
|
||||
a, a:visited
|
||||
color: #4a93d2
|
||||
|
||||
.code, .message, .explanation, .back-link
|
||||
line-height: 1.2
|
||||
margin: 0px
|
||||
@ -309,13 +312,14 @@ body
|
||||
color: #ccc
|
||||
|
||||
.explanation
|
||||
line-height: 1.3
|
||||
margin-top: 10px
|
||||
font-size: 20px
|
||||
color: #bbb
|
||||
white-space: pre-line
|
||||
|
||||
.back
|
||||
margin-top: 15vh
|
||||
color: #4a93d2
|
||||
font-size: 25px
|
||||
|
||||
.homepage
|
||||
|
Loading…
Reference in New Issue
Block a user