rir55
1
I am a swift coder, not a JavaScript coder. But, with the help of ChatGPT I am slowly getting there.
I am trying to create a Firefox extension that will export an XMP file scaped from specific data on a webpage.
const parser = new DOMParser();
const xmpDocument = parser.parseFromString(xmpData, 'text/xml');
const subjectReference = xmpDocument.querySelector('Iptc4xmpCore\\:SubjectReference').textContent;
const headline = xmpDocument.querySelector('photoshop\\:Headline').textContent;
const description = xmpDocument.querySelector('dc\\:description rdf\\:li').textContent;
const subject = xmpDocument.querySelector('dc\\:subject rdf\\:li').textContent;
console.log('Subject Reference:', subjectReference);
console.log('Headline:', headline);
console.log('Description:', description);
console.log('Subject:', subject);
I have the base manifest.json, popup HTML and JS files for a basic FF extension, but not familliar with the process.
Can anybody please advise ?
a2937
2
I’d love to help you but I’m not as familiar with xmp data at all. I’m not even sure what data you are trying to even scrape.
rir55
3
Thank you for your interest.
Originally I wanted the title of the webpage, the URL and any data currently selected by the cursor.
Those three fields would then be exported into the XMP (Adboe) format into a file.
The code I have as follows should do it, but I’m not familliar with JavaScript and how to put it all together:
// Create a new XMP document
const xmpDocument = document.implementation.createDocument(null, 'x:xmpmeta', null);
// Create the root element
const xmpRoot = xmpDocument.documentElement;
xmpRoot.setAttribute('xmlns:x', 'adobe:ns:meta/');
xmpRoot.setAttribute('x:xmptk', 'XMP toolkit 2.9-9, framework 1.6');
// Create RDF element
const rdf = xmpDocument.createElementNS('http://www.w3.org/1999/02/22-rdf-syntax-ns#', 'rdf:RDF');
xmpRoot.appendChild(rdf);
// Create Iptc4xmpCore element
const iptcElement = xmpDocument.createElement('rdf:Description');
iptcElement.setAttribute('rdf:about', '');
iptcElement.setAttribute('xmlns:Iptc4xmpCore', 'http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/');
rdf.appendChild(iptcElement);
// Create SubjectReference element
const subjectReference = xmpDocument.createElement('Iptc4xmpCore:SubjectReference');
subjectReference.textContent = 'http://speiselift.com/2011/05/die-tasse-im-fuchspelz/';
iptcElement.appendChild(subjectReference);
// Create SubjectCode element
const subjectCode = xmpDocument.createElement('Iptc4xmpCore:SubjectCode');
iptcElement.appendChild(subjectCode);
// Create Bag element
const bag = xmpDocument.createElement('rdf:Bag');
subjectCode.appendChild(bag);
// Create Bag's rdf:li element
const li = xmpDocument.createElement('rdf:li');
li.textContent = 'http://speiselift.com/2011/05/die-tasse-im-fuchspelz/';
bag.appendChild(li);
// Create Photoshop element
const photoshopElement = xmpDocument.createElement('rdf:Description');
photoshopElement.setAttribute('rdf:about', '');
photoshopElement.setAttribute('xmlns:photoshop', 'http://ns.adobe.com/photoshop/1.0/');
rdf.appendChild(photoshopElement);
// Create Headline element
const headline = xmpDocument.createElement('photoshop:Headline');
headline.textContent = 'Die Tasse im Fuchspelz Speiselift';
photoshopElement.appendChild(headline);
// Create DC element
const dcElement = xmpDocument.createElement('rdf:Description');
dcElement.setAttribute('rdf:about', '');
dcElement.setAttribute('xmlns:dc', 'http://purl.org/dc/elements/1.1/');
rdf.appendChild(dcElement);
// Create Description element
const description = xmpDocument.createElement('dc:description');
const alt = xmpDocument.createElement('rdf:Alt');
const li = xmpDocument.createElement('rdf:li');
li.setAttribute('xml:lang', 'x-default');
li.textContent =
'Gegen diesen Pelz haben Tierschützer sicher nichts einzuwenden: Das Pariser Label Kitsuné hat als Hommage an den eigenen Namen (bedeutet Rotfuchs auf Japanisch) diese Tasse mit dem Namen Fur Mug kreiert.';
alt.appendChild(li);
description.appendChild(alt);
dcElement.appendChild(description);
// Create Subject element
const subject = xmpDocument.createElement('dc:subject');
const subjectBag = xmpDocument.createElement('rdf:Bag');
const subjectLi = xmpDocument.createElement('rdf:li');
subjectLi.textContent = 'pax';
subjectBag.appendChild(subjectLi);
subject.appendChild(subjectBag);
dcElement.appendChild(subject);
// Serialize the XMP document to a string
const xmpSerializer = new XMLSerializer();
const xmpString = xmpSerializer.serializeToString(xmpDocument);
// Output the XMP data
console.log('Generated XMP data:');
console.log(xmpString);
system
Closed
4
This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.