🏠 Home 

Instagram Post Date and Location

Adds post date and location to instagram feed


Install this script?
// ==UserScript==
// @name         Instagram Post Date and Location
// @namespace    http://tampermonkey.net/
// @version      1.3
// @description  Adds post date and location to instagram feed
// @author       SH3LL
// @match        https://www.instagram.com/*
// @grant        GM_addStyle
// @run-at       document-start
// ==/UserScript==
(function() {
'use strict';
GM_addStyle(`
.post-date-label {
position: absolute;
top: 10px;
left: 10px;
background-color: rgba(0, 0, 0, 0.7);
color: white;
padding: 5px;
border-radius: 5px;
font-size: 12px;
z-index: 9999;
}
.post-location-label {
position: absolute;
top: 10px;
right: 10px;
background-color: rgba(0, 0, 0, 0.7);
color: white;
padding: 5px;
border-radius: 5px;
font-size: 12px;
z-index: 9999;
}
`);
let interceptedJsons = [];
const originalSend = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function() {
this.addEventListener('readystatechange', function() {
if (this.readyState === 4 && this.responseURL.includes('/graphql/query')) {
try {
const json = JSON.parse(this.responseText);
if (json && json.data && json.data.xdt_api__v1__feed__user_timeline_graphql_connection) {
interceptedJsons.push(json);
}
} catch (error) {
console.error("Errore nel parsing JSON", error);
}
}
});
originalSend.apply(this, arguments);
};
function addDateLabel(postElement, date) {
if (!postElement.querySelector('.post-date-label')) {
const label = document.createElement('div');
label.classList.add('post-date-label');
label.textContent = "📅"+formatDate(date * 1000);
postElement.style.position = 'relative';
postElement.children[0].appendChild(label);
}
}
function addLocationLabel(postElement, locationName, locationPk) {
if (locationName && !postElement.querySelector('.post-location-label')) {
const label = document.createElement('a');
label.classList.add('post-location-label');
// Tronca il nome della posizione se è più lungo di 30 caratteri
const truncatedLocationName = locationName.length > 30 ? locationName.substring(0, 30) + "..." : locationName;
label.textContent = ` ${truncatedLocationName}`; // Aggiunge l'emoji e il nome troncato
label.href = `https://www.instagram.com/explore/locations/${locationPk}`;
label.target = "_blank";
postElement.style.position = 'relative';
postElement.children[0].appendChild(label);
}
}
function formatDate(timestamp) {
const date = new Date(timestamp);
const options = { year: 'numeric', month: 'short', day: 'numeric' };
return date.toLocaleDateString('en-US', options);
}
function processPosts() {
const postElements = document.querySelectorAll('.x1lliihq.x1n2onr6.xh8yej3.x4gyw5p.x1ntc13c.x9i3mqj.x11i5rnm.x2pgyrj');
postElements.forEach(postElement => {
const linkElement = postElement.querySelector('a[href*="/p/"], a[href*="/reel/"]');
if (linkElement) {
const href = linkElement.getAttribute('href');
const parts = href.split('/');
const postCode = parts[3];
interceptedJsons.forEach(json => {
if (json && json.data && json.data.xdt_api__v1__feed__user_timeline_graphql_connection && json.data.xdt_api__v1__feed__user_timeline_graphql_connection.edges) {
json.data.xdt_api__v1__feed__user_timeline_graphql_connection.edges.forEach(edge => {
if (edge.node.code === postCode) {
const timestamp = edge.node.taken_at;
addDateLabel(postElement, timestamp);
if (edge.node.location) {
const locationName = "📌" + edge.node.location.name;
const locationPk = edge.node.location.pk;
addLocationLabel(postElement, locationName, locationPk);
}
}
});
}
});
}
});
}
processPosts();
const observer = new MutationObserver(mutations => {
processPosts();
});
observer.observe(document.body, { childList: true, subtree: true });
})();