Advertisement
Guest User

Untitled

a guest
Feb 3rd, 2025
20
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.13 KB | None | 0 0
  1. {"DeviantArt-x-q-p":{"link":"^(?:(?:[^.]+\\.)?deviantart\\.com/(?:(?:[^/]+/)?art/[^#]+$|#/\\w+)|fav\\.me/(\\w+))","url":": $[1] ? 'http://fav.me/' + $[1] : $[0]","res":":\n//If set to true, the imagus style of media description will be used.\n//Example: {Dimensions} {Publish Date} | {Title} | {Author} | {Category} \n//Set to false to use the sieve author's preference. The description length is a useful indicator to tell if the post is worth clicking to read the description.\n//Example: {Title} | {Author} | {Description Length} \nconst imagus_description_style = true;\n\n//if set to true, the largest possible media will be displayed. Useful for downloading highest quality content.\n//if set to false, web-optimized media will be displayed. Best choice for fast browsing and low internet speeds.\nconst prefer_largest_media = true;\n\n//Set true to view debugging console messages\nconst debug = false;\n\n\nif(debug) console.log(\"DeviantArt Verbose Sieve V2.4\");\n\nlet pagedefinitionsJSON=$._.match(/\\.__INITIAL_STATE__\\s*=\\s*JSON\\.parse\\((\"[^\\n]+\")/)\nif(!pagedefinitionsJSON) //If page definitions could not be parsed, fallback to regex attempt\n{\n pagedefinitionsJSON=$._.match(/collect_rid=\"[^\"]+\" src=\"([^\"]+)\"[^>]+alt=\"([^\"]+)\"[^>]+=\"dev-content-full/)\n return pagedefinitionsJSON&&[pagedefinitionsJSON[1], pagedefinitionsJSON[2]]\n}\n\n//This deviationdefinition_all let is thorough information about the deviation, including the user and related deviations\nlet deviationdefinition_all=JSON.parse(eval(pagedefinitionsJSON[1]))['@@entities'];\n//if(debug) console.log(\"Deviation Definition (All)\", deviationdefinition_all);\n\n\n//Grab JSON extended deviation info\nlet deviationkey=Object.keys(deviationdefinition_all.deviationExtended)[0];\nlet deviationdefinition_extended=deviationdefinition_all.deviationExtended[deviationkey];\n//Grab JSON specific deviation info\nlet deviationdefinition_specific=deviationdefinition_all.deviation[deviationkey];\n\n\n//Set the media description text\nlet toptext;\n\nif(imagus_description_style) {//Imagus standard media description desired. Grab relevant info and create the top text.\n\n //Create media resolution string\n let resolutionstring = deviationdefinition_extended.originalFile.width + \"x\" + deviationdefinition_extended.originalFile.height;\n\n //Create friendly date string\n const parseddatetime = new Date();\n parseddatetime.setTime(Date.parse(deviationdefinition_specific.publishedTime));\n const months =[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec \"];\n let month = months[parseddatetime.getMonth()];\n let day = parseddatetime.getDate();\n let year = parseddatetime.getFullYear();\n let datestring = month + \" \" + day + \" \" + year\n\n //Create top 5 tags string\n let tagsstring = \"\";\n if(deviationdefinition_extended.tags) {\n for(let i=0; i<deviationdefinition_extended.tags.length; i++) {\n if(i > 0) tagsstring += \", \";//commas after the first tag\n tagsstring += deviationdefinition_extended.tags[i].name;\n\n if(i > 4) {//cut short if more than 5 tags assigned\n tagsstring += \" ...\";\n break;\n }\n }\n }\n else {\n //Assign friendly text if no tags assigned\n tagsstring = tagsstring == \"\" ? \"No Tags\" : tagsstring;\n }\n \n\n\n //Define the top text\n toptext = datestring + ' | ' + deviationdefinition_specific.title + ' | ' + \n deviationdefinition_all.user[deviationdefinition_specific.author].username;\n}\nelse{\n //get length of plain text description by letting the DOM parse it for us\n let description = deviationdefinition_all.deviationExtended[deviationkey].descriptionText.html.markup;\n\n if(debug) console.log(\"Description: \", description)\n\n let descriptionlength = 0;\n if(description != null) {//description is defined, use DOM trickery to get text length\n let tempDivElement = document.createElement(\"div\");\n tempDivElement.innerHTML = description; \n if(tempDivElement.textContent != null) {\n descriptionlength = tempDivElement.textContent.length; \n }\n else if(tempDivElement.innerText != null) {\n descriptionlength = tempDivElement.innerText.length;\n }\n }\n\n \n\n //Define the top text\n toptext = deviationdefinition_specific.title + \n ' | ' + deviationdefinition_all.user[deviationdefinition_specific.author].username + \n (descriptionlength == 0 ? \"\" : ' | ' + descriptionlength);\n \n} \n\n//The rest is parsing the correct media URLs\nlet mediadefinition=deviationdefinition_specific.media;\nlet baseuri=mediadefinition.baseUri;\nlet sizedpreviewdefinition=mediadefinition.types.filter(function(t){return !!t.c||!!t.b}).pop();\nlet mediatokens=mediadefinition.token;\nif(!baseuri)return;\n\nif(debug) console.log(\"deviationdefinition_all\", deviationdefinition_all);\nif(debug) console.log(\"deviationdefinition_specific\", deviationdefinition_specific);\nif(debug) console.log(\"deviationdefinition_extended\", deviationdefinition_extended);\nif(debug) console.log(\"mediadefinition\", mediadefinition);\nif(debug) console.log(\"baseuri\", baseuri);\nif(debug) console.log(\"sizedpreviewdefinition\", sizedpreviewdefinition);\nif(debug) console.log(\"mediatokens\", mediatokens);\n\n\n//There are 0 or 1 or 2 tokens in the mediatoken definition for some reason. Which one works is guesswork.\nlet mediatokenstring0=mediatokens?'?token='+mediatokens[0]:'';\nlet mediatokenstring1=mediatokens&&mediatokens[1]?'?token='+mediatokens[1]:mediatokenstring0;//define the second token if it exists, otherwise default to first token\n\nlet medialinkobject;//final goal is to fill in this object\n\nif(prefer_largest_media) {\n //If download info exists, use link directly. Handles most GIFs and images.\n if(deviationdefinition_all.deviationExtended[deviationkey].download) {\n if(debug) console.log(\"Direct download link found.\")\n let downloadlink = deviationdefinition_all.deviationExtended[deviationkey].download.url;\n\n if(downloadlink.match(/\\.(?:7z|rar|zip|pdf)\\?/) == null) {//Exclude filetypes not displayed with imagus\n medialinkobject = [downloadlink];\n\n //Construct the final return object\n let returnval = [\n [medialinkobject, toptext]\n ];\n if(debug) console.log(\"Final Return Value\", returnval)\n return returnval;\n }\n if(debug) console.log(\"Undisplayable filetype detected, skipping download link.\");\n }\n\n if(debug) console.log(\"Direct download link not found or not an Imagus media type.\")\n\n // Extract meaningful objects that contain identifiers\n let fullview;\n let preview;\n let largestvideo;\n let gif;\n let has_valid_definition = !!(mediadefinition.types);\n for(let i=0; i<mediadefinition.types.length; i++) {\n let currentdefinition = mediadefinition.types[i];\n if(currentdefinition.t == 'preview') {\n preview = currentdefinition;\n continue;\n }\n if(currentdefinition.t == 'fullview') {\n fullview = currentdefinition;\n continue;\n }\n if(currentdefinition.t == 'video') {\n //There may be multiple video definitions, keep the largest one\n if(largestvideo) {\n //compare widths to determine larger video, keep larger definition\n largestvideo = (largestvideo.w < currentdefinition.w) ? currentdefinition : largestvideo;\n }\n else { //assign first video definition as largest\n largestvideo = currentdefinition;\n }\n continue;\n }\n if(currentdefinition.t == 'gif') {\n gif = currentdefinition;\n continue;\n }\n }\n\n\n if(largestvideo) {// Video definition exists. Use this.\n if(debug) console.log(\"Video detected.\");\n medialinkobject = [largestvideo.b];\n }\n else if(gif) {// GIF definition exists\n if(debug) console.log(\"GIF detected.\");\n medialinkobject = [gif.b+mediatokenstring0];;\n }\n else if(fullview) {// Fullview exists\n if(debug) console.log(\"Fullview definition of image detected.\");\n if(debug) console.log(\"fullview\", fullview);\n if(fullview.b||fullview.c) { //url parts are in this definition\n medialinkobject = [baseuri+(fullview.b||fullview.c).replace('<prettyName>', deviationdefinition_specific.media['prettyName']) + mediatokenstring0];\n }\n else {\n if(debug) console.log(\"Fullview definition incomplete. Attempting basic url construction...\");\n medialinkobject = [baseuri+mediatokenstring0];\n }\n }\n else {//no valid definitions\n if(debug) console.log(\"No sized preview definition found. Attempting basic url construction...\");\n medialinkobject = [baseuri+mediatokenstring0];\n }\n}\nelse {//Attempt to get web optimized media instead\n\n //Get viewport to optimize against\n const viewportwidth = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0);\n const viewportheight = Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0);\n if(debug) console.log(\"Viewport: \" + viewportwidth + \" by \" + viewportheight);\n\n if(mediadefinition.baseUri.includes(\".gif\")) {//handle GIFs special as they don't have a definition in the mediadefinition types\n if(debug) console.log(\"GIF detected.\");\n\n //Construct the final return object\n medialinkobject = [mediadefinition.baseUri+mediatokenstring0];\n let returnval = [\n [medialinkobject, toptext]\n ];\n \n if(debug) console.log(\"Final Return Value\", returnval)\n return returnval;\n }\n\n // Extract meaningful objects that contain identifiers\n let fullview;\n let preview;\n let bestvideosizematch;\n let bestvideosizecloseness = 10000.0;//large number is a bad fit, start this number with arbitrarily bad ratio\n let gif;\n let bestimagesizematch;\n let bestimagesizecloseness = 10000.0;//large number is a bad fit, start this number with arbitrarily bad ratio\n let has_valid_definition = !!(mediadefinition.types); \n for(let i=0; i<mediadefinition.types.length; i++) {\n let currentdefinition = mediadefinition.types[i];\n if(currentdefinition.t == 'preview') {//save preview definition as a default case\n preview = currentdefinition;\n }\n if(currentdefinition.t == 'video') {\n //There may be multiple video definitions, keep the best size fit\n if(bestvideosizematch == undefined) {\n bestvideosizematch = currentdefinition\n }\n else {\n let currentsizecloseness = Math.abs(1- (currentdefinition.h/viewportheight));\n if(debug) console.log(\"currentsizecloseness\", currentsizecloseness);\n if(currentsizecloseness < bestvideosizecloseness) {\n bestvideosizecloseness = currentsizecloseness;\n bestvideosizematch = currentdefinition;\n if(debug) console.log(\"New best match at closeness \", bestvideosizecloseness, \" type \", bestvideosizematch.t);\n }\n }\n continue;\n }\n if(currentdefinition.t == 'gif') {//GIFs only have one definition if they exist\n gif = currentdefinition;\n continue;\n }\n\n //If none of the special cases are matched, select the largest best size fit definition\n //Imagus evaluates height first so this section does as well\n if(bestimagesizematch == undefined) {\n bestimagesizematch = currentdefinition\n }\n else {\n let currentsizecloseness = Math.abs(1- (currentdefinition.h/viewportheight));\n if(debug) console.log(\"currentsizecloseness\", currentsizecloseness);\n if(currentsizecloseness < bestimagesizecloseness) {\n bestimagesizecloseness = currentsizecloseness;\n bestimagesizematch = currentdefinition;\n if(debug) console.log(\"New best match at closeness \", bestimagesizecloseness, \" type \", bestimagesizematch.t);\n }\n }\n\n }\n\n\n if(bestvideosizematch) {// Video definition exists. Takes precedence over other media types.\n if(debug) console.log(\"Video detected.\");\n medialinkobject = [bestvideosizematch.b];\n }\n else if(gif) {// GIF definition exists. Takes precedence over everything but video.\n if(debug) console.log(\"GIF detected.\");\n medialinkobject = [gif.b+mediatokenstring0];;\n }\n else{// Attempt image media definition\n \n if(bestimagesizematch.b||bestimagesizematch.c) { //Use bset size match if it has a complete definition\n medialinkobject = [baseuri+(bestimagesizematch.b||bestimagesizematch.c).replace('<prettyName>', deviationdefinition_specific.media['prettyName']) + mediatokenstring0];\n }\n else if(preview.b||preview.c) {//Best size match was not a complete definition, use preview definition as it seems reliably available.\n if(debug) console.log(\"Best sized definition incomplete. Using preview version...\");\n medialinkobject = [baseuri+(preview.b||preview.c).replace('<prettyName>', deviationdefinition_specific.media['prettyName']) + mediatokenstring0];\n \n }\n else {//Preview version also failed, attempt basic URL construction\n if(debug) console.log(\"No sized preview definition found. Attempting basic url construction...\");\n medialinkobject = [baseuri+mediatokenstring0];\n }\n }\n}\n\nif(Array.isArray(medialinkobject))medialinkobject.unshift(medialinkobject[0]?.replace(/(\\/f\\/[^.]+\\.\\w+).*/,'/intermediary$1'));\n\n//Construct the final return object\nlet returnval = [\n [medialinkobject, toptext]\n ];\nif(debug) console.log(\"Final Return Value\", returnval)\nreturn returnval;","img":"^images-wixmp-ed30a86b8c4ca887773594c2\\.wixmp\\.com/[a-z]/[\\da-f-]{36}/([\\da-z]+)-.*","note":"iceiller9999\nv2.4\nhttps://www.reddit.com/r/imagus/comments/15iej6p/deviantart_sieve_bug_fix/\nOLD\nhttps://www.reddit.com/r/imagus/comments/sjeohm/deviantart_comprehensive_sieve\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=240#4\n\n\n!!!\nУмеет открывать картинки в более высоком или низком разрешении (опционально) - см расшифровку \"флагов\" ниже (англ).\n==\nOpens pictures in a higher resolution (optional). See the explanation of the \"flags\" below:\n\n1. imagus_description_style. Set flag \"true\" to use Imagus description style. Set to \"false\" to use a more concise version. More details in the code comments.\n\n2. prefer_largest_media. Set flag \"false\" to load web optimized media, good for speed/bandwidth. Set flag \"true\" to load the largest media size possible, excellent for downloading."}}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement