Advertisement
Guest User

Untitled

a guest
Oct 16th, 2024
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.29 KB | None | 0 0
  1. {"X.COM-h-p":{"useimg":1,"link":"^(?:m(?:obile)?\\.)?(?:x|(api\\.[fv]x)?twitter)\\.com/(?:[^/]+/)*status/(\\d+)(?:\\?img_id/(.+))?.*","url":": (()=>{const use_on_timestamp = true , n=this.node;if(/^https:\\/\\/platform\\.twitter/.test(n.baseURI)||/^(?:x|twitter)\\.com$/.test(location.hostname)&&!RegExp(`^(?:svg|path${use_on_timestamp?'|time':''})$`).test(n.localName)&&!n.IMGS_TRG)throw new Error('Not used on this link');return $[1]||!$[2]?$[0]:'https://cdn.syndication.twimg.com/tweet-result?id='+$[2]+'&token='+((Number($[2])/1e15)*Math.PI).toString(6**2).replace(/(0+|\\.)/g,'')+($[3]?'&'+$[3]:'')})()","res":":\nconst show_post_with_multiple_images_as_album = true // Hovering over image in multi-image post shows images as an album.\n\nconst show_hovered_image_first_in_album = true // Shows the hovered over image first in the album.\n\nconst truncate_album_before_hovered_image = true // Removes images before hovered image in album.\n\nconst show_pfp_if_no_media = false // Show profile image instead of 'No Media' message.\n\nconst use_vxtwitter_api_fallback = true // Use third party API VXTwitter as backup\n\nconst use_fxtwitter_api_fallback = false // Use third party API FXTwitter as backup\n\n// If both VXTwitter and FXTwitter are set to true, one is randomly chosen\n\nconst hide_third_party_api_message = false // Hide API message on sensitive media\nconsole.log('Twitter data:',$._)\nif(!$[1]&&$._[0]!=='{'){\nconst x = new XMLHttpRequest();\nx.open('Get','https://cdn.syndication.twimg.com/tweet-result?id='+$[2]+'&token='+((Number($[2])/1e15)*Math.PI).toString(6**2).replace(/(0+|\\.)/g,''),false);\nx.send();\nif(x.status!==200)return '';\n$._ = x.responseText;\n}\nlet data = $._[0]==='{'?JSON.parse($._):'';\nif(!data)return null;\nconst upgradeImage = img => ['#'+img.replace(/\\.([a-z0-9]{3,4}$)/,'?format=$1&name=orig').replace('webp', 'jpg'), img.replace(/\\.([a-z0-9]{3,4}$)/,'?format=$1&name=large').replace('webp', 'jpg')];\nlet media = [];\nconst imgIdRegex = new RegExp(`${$[3]}`), pfp = data.user?.profile_image_url_https?.replace(/_[a-z0-9]+\\./, '.'), backupURL = use_fxtwitter_api_fallback&&use_vxtwitter_api_fallback ? ['v', 'f'][Math.floor(Math.random()*2)] : use_vxtwitter_api_fallback ? 'v' : use_fxtwitter_api_fallback ? 'f' : '';\nif(!$[1]){\nconst text = data.text, qText = data.quoted_tweet?.text;\nlet mediaDetails = data.mediaDetails||[], qtMediaDetails = data.quoted_tweet?.mediaDetails||[], card = data.card?.binding_values?.unified_card?.string_value||data.card?.binding_values;\nif(!$[3]){\nif(mediaDetails)mediaDetails.forEach(i => {\n\tconst isVideo = i.video_info ? true : false;\n\ti = isVideo ? i?.video_info?.variants.filter(i=>i.content_type==='video/mp4').sort((a,b)=>b.bitrate-a.bitrate).map(i=>i.url) : i.media_url_https;\n\tmedia.push(isVideo ? [['#'+i[0],i?.[1]||''],(qtMediaDetails?.length?'Main tweet media: ':'')+text+(!qtMediaDetails?.length&&qText?' | Quote tweet text: '+qText:'')] : [upgradeImage(i),(qtMediaDetails?.length?'Main tweet media: ':'')+text+(!qtMediaDetails?.length&&qText?' | Quote tweet text: '+qText:'')]);\n\t})\nif(qtMediaDetails)qtMediaDetails.forEach(i => {\n\tconst isVideo = i.video_info ? true : false;\n\ti = isVideo ? i?.video_info?.variants.filter(i=>i.content_type==='video/mp4').sort((a,b)=>b.bitrate-a.bitrate).map(i=>i.url) : i.media_url_https;\n\tmedia.push(isVideo ? [['#'+i[0],i?.[1]||''],'Quote tweet media: '+qText+(!mediaDetails?.length&&text?' | Main tweet text: '+text:'')] : [upgradeImage(i),'Quote tweet media: '+qText+(!mediaDetails?.length&&text?' | Main tweet text: '+text:'')]);\n\t})\nif(card)media.push([typeof card === 'string' ? [Object.values(JSON.parse(card)?.media_entities)?.[0]?.media_url_https] : ['#'+card.photo_image_full_size_original?.image_value?.url, card.photo_image_full_size_large?.image_value?.url],text]);\n}else{\n const videoId = mediaDetails.concat(qtMediaDetails).find(i=>imgIdRegex.test(i.media_url_https))?.video_info?.variants?.filter(i=>i.content_type==='video/mp4').sort((a,b)=>b.bitrate-a.bitrate)?.[0].url?.match(/\\/([^\\/.]+)\\.mp4/)?.[1]||'', videoIdRegex = videoId ? new RegExp(videoId) : null;\nif(mediaDetails?.video_info?.variants?.some(i=>imgIdRegex.test(i.poster))||mediaDetails?.some(i=>imgIdRegex.test(i.media_url_https)))mediaDetails.forEach(i => {\n\tconst isVideo = i.video_info ? true : false;\n\ti = isVideo ? i.video_info.variants.filter(i=>i.content_type==='video/mp4').sort((a,b)=>b.bitrate-a.bitrate).map(i=>i.url) : i.media_url_https;\n\tmedia.push(isVideo ? [['#'+i[0],i?.[1]||''],text] : [upgradeImage(i),text]);\n\t})\n\tif(qtMediaDetails?.video_info?.variants?.some(i=>imgIdRegex.test(i.poster))||qtMediaDetails?.some(i=>imgIdRegex.test(i.media_url_https)))qtMediaDetails.forEach(i => {\n\tconst isVideo = i.video_info ? true : false;\n\ti = isVideo ? i.video_info.variants.filter(i=>i.content_type==='video/mp4').sort((a,b)=>b.bitrate-a.bitrate).map(i=>i.url) : i.media_url_https;\n\tmedia.push(isVideo ? [['#'+i[0],i?.[1]||''],qText] : [upgradeImage(i),qText]);\n\t})\nif(card)media.push([['#'+card.photo_image_full_size_original?.image_value?.url, card.photo_image_full_size_large?.image_value?.url],text]);\n if(!show_post_with_multiple_images_as_album)media=[media.find(i=>imgIdRegex.test(i[0][0])||videoIdRegex?.test(i[0][0]))];\n else if(truncate_album_before_hovered_image)media = media.splice(media.findIndex(i=>imgIdRegex.test(i[0][0])||videoIdRegex?.test(i[0][0])));\n\telse if(show_hovered_image_first_in_album)media = media.concat(media.splice(0,media.findIndex(i=>imgIdRegex.test(i[0][0])||videoIdRegex?.test(i[0][0]))));\n\t}\nreturn media?.length&&media||!text&&!qText&&backupURL&&{loop:'https://api.'+backupURL+'xtwitter.com/status/'+$[2]+($[3]?'?img_id'+$[3]:'')}||no_media(text)\n} else {\n const backupMessage = !hide_third_party_api_message&&'A third party API, '+$[1].slice(4).toUpperCase()+'Twitter, was used to get this media. This can be disabled in the sieve. For more information, see the notes section of the TWITTER_ext-p sieve. | '||'';\n if($[1][4]==='v'){\n this.loopStop = this.loopStop||0;\n const text = data.text;\n let mediaURLs = data.media_extended;\n if($[3]){\n if(!mediaURLs.some(i=>imgIdRegex.test(i.thumbnail_url))&&this.loopStop===0&&data.qrtURL){\n this.loopStop=1;\n return {loop:data.qrtURL.replace(/^.+(\\.com\\/).*(status\\/\\d+).*/,(t,g1,g2)=>'https://api.vxtwitter'+g1+g2+($[3]?'?img_id'+$[3]:''))};\n }\n if(!show_post_with_multiple_images_as_album){\n media = [mediaURLs.find(i=>imgIdRegex.test(i.thumbnail_url))].map(i=>[(i.type==='video'||/\\.mp4/.test(i.url)?i.url:upgradeImage(i.url)),backupMessage+text]);\n }else if(truncate_album_before_hovered_image){\n media = mediaURLs.splice(mediaURLs.findIndex(i=>imgIdRegex.test(i.thumbnail_url))).map(i=>[(i.type==='video'||/\\.mp4/.test(i.url)?i.url:upgradeImage(i.url)),backupMessage+text]);\n }else if(show_hovered_image_first_in_album){\n media = mediaURLs.concat(mediaURLs.splice(0,mediaURLs.findIndex(i=>imgIdRegex.test(i.thumbnail_url)))).map(i=>[(i.type==='video'||/\\.mp4/.test(i.url)?i.url:upgradeImage(i.url)),backupMessage+text]);\n }else{\n media = mediaURLs.map(i=>[(i.type==='video'||/\\.mp4/.test(i.url)?i.url:upgradeImage(i.url)),backupMessage+text]);\n }\n }else{\n media = mediaURLs.map(i=>[(i.type==='video'||/\\.mp4/.test(i.url)?i.url:upgradeImage(i.url)),backupMessage+text]);\n }\n delete this.loopStop;\n} else {\n const text = data.tweet?.text, qText = data.quote?.text;\n let mediaURLs = data.tweet?.media?.all||[],qtMediaURLs = data.tweet?.quote?.media?.all||[];\n if(!$[3]){\n mediaURLs.forEach(i => {\n\tconst isVideo = /\\.mp4/.test(i.url) ? true : false;\n\ti = isVideo ? i?.variants.filter(i=>i.content_type==='video/mp4').sort((a,b)=>b.bitrate-a.bitrate).map(i=>i.url) : i.url;\n\tmedia.push(isVideo ? [['#'+i[0],i?.[1]||''],backupMessage+text] : [upgradeImage(i),backupMessage+text]);\n\t})\n }else{\n const videoId = mediaURLs.concat(qtMediaURLs).find(i=>imgIdRegex.test(i.thumbnail_url))?.variants?.filter(i=>i.content_type==='video/mp4').sort((a,b)=>b.bitrate-a.bitrate)?.[0].url?.match(/\\/([^\\/.]+)\\.mp4/)?.[1]||'', videoIdRegex = videoId ? new RegExp(videoId) : null;\n if(mediaURLs?.some(i=>imgIdRegex.test(i.thumbnail_url))||mediaURLs?.some(i=>imgIdRegex.test(i.url)))mediaURLs.forEach(i => {\n\tconst isVideo = /\\.mp4/.test(i.url) ? true : false;\n\ti = isVideo ? i.variants.filter(i=>i.content_type==='video/mp4').sort((a,b)=>b.bitrate-a.bitrate).map(i=>i.url) : i.url;\n\tmedia.push(isVideo ? [['#'+i[0],i?.[1]||''],backupMessage+text] : [upgradeImage(i),backupMessage+text]);\n\t})\n\tif(qtMediaURLs?.some(i=>imgIdRegex.test(i.thumbnail_url))||qtMediaURLs?.some(i=>imgIdRegex.test(i.url)))qtMediaURLs.forEach(i => {\n\tconst isVideo = i.format?.startsWith('video') ? true : false;\n\ti = isVideo ? i.variants.filter(i=>i.content_type==='video/mp4').sort((a,b)=>b.bitrate-a.bitrate).map(i=>i.url) : i.url;\n\tmedia.push(isVideo ? [['#'+i[0],i?.[1]||''],qText] : [upgradeImage(i),backupMessage+qText]);\n\t})\n if(!show_post_with_multiple_images_as_album)media=[media.find(i=>imgIdRegex.test(i[0][0])||videoIdRegex?.test(i[0][0]))];\n else if(truncate_album_before_hovered_image)media = media.splice(media.findIndex(i=>imgIdRegex.test(i[0][0])||videoIdRegex?.test(i[0][0])));\n\telse if(show_hovered_image_first_in_album)media = media.concat(media.splice(0,media.findIndex(i=>imgIdRegex.test(i[0][0])||videoIdRegex?.test(i[0][0]))));\n\t}\n }\n return media\n}\nfunction no_media(t){\nreturn show_pfp_if_no_media&&pfp ? [pfp,'No media. Tweet text: '+t] : [ 'data:image/svg+xml,' + encodeURIComponent(`\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"100\" width=\"540\" style=\"background-color: #2a2a2a;\">\n <foreignObject height=\"100%\" width=\"100%\">\n <div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; height: 100%; width: 100%;\">\n <span style=\"color: tomato; display: table-cell; font: 36px sans-serif; vertical-align: middle; text-align: center; white-space: pre-wrap;\">\n No media\n </span>\n </div>\n </foreignObject>\n </svg>`.replace(/\\n\\s+/g, '')), 'Tweet text: '+t ]\n}","img":"^(?:(pbs\\.twimg\\.com/(?:(profile_banners/\\d+/\\d+/)|([^?]+\\?format=[^&]+&name=)|(?!profile_images/)[^.]+\\.)).*|((?:x|twitter)\\.com/\\w+(?:/photo|\\?|$).*))","loop":2,"to":":\nconst n=this.node\nconst id=$[0].match(/\\/([^\\/?.]+)(?:[?.]|$)/)?.[1]||''\nif($[2])return $[1]+'1500x500'\n\nif($[4])return n.closest('a')?.querySelector('img[src][draggable=\"true\"]')?.src?.replace(/_[a-z0-9]+\\./, '.')||''\n\nif(!/(?:x|twitter)\\.com$/.test(location.hostname)||/\\/semantic_core_img\\//.test($[1]))return '#'+$[1].replace(/\\.([a-z0-9]{3,4}$)|\\?format=(\\w+)&.+/,'?format=$1$2&name=orig').replace('webp', '#jpg png#')+'\\n'+$[1].replace(/\\.([a-z0-9]{3,4}$)|\\?format=(\\w+)&.+/,'?format=$1$2&name=large').replace('webp', '#jpg png#')\n\nif((/(?:x|twitter)\\.com\\/(?:[^\\/]+\\/|search\\?q=.+=)media/.test(location.href) && !/\\/semantic_core_img\\//.test($[0]))){\n let el = n;\n while (el.parentNode && !el.querySelector('a[href*=\"/status/\"]')) {\n el = el.parentNode\n };\n return el.querySelector('a[href*=\"/status/\"]').href.replace(/^(https:\\/\\/[^\\/]+\\/[^\\/]+\\/status\\/\\d+).*/, '$1?img_id/'+id)\n}\n\nreturn (n.closest('article')?.querySelector('a[href*=\"/status/\"][aria-label]') || n.closest('article,div[class=\"css-1dbjc4n r-1iusvr4 r-16y2uox r-a5pmau r-bnwqim\"],div[class=\"css-1dbjc4n r-1iusvr4 r-16y2uox r-bnwqim\"]')?.querySelector('a[href*=\"/status/\"]'))?.href?.replace(/^(https:\\/\\/[^\\/]+\\/[^\\/]+\\/status\\/\\d+).*/, '$1?img_id/'+id)","note":"Imagus_fan\nhttps://www.reddit.com/r/imagus/comments/189brbb/comment/lb47q8o\nOLD\nhttps://www.reddit.com/r/imagus/comments/1bg8o7a/comment/l37gkgo\nhttps://www.reddit.com/r/imagus/comments/1bg8o7a/comment/kvpiolk\n\n\n!!!\nA sieve to support Twitter external links (videos and images + albums).\n+\nThis rule should PRECEDE the Twitter-p rule.\n+\nAll information about the capabilities and features of the sieve, and also about the options presented in it: see FAQ, p.20.\n\n\nEXAMPLES\nhttps://www.reddit.com/domain/x.com/new\nhttps://www.reddit.com/domain/twitter.com/new\nhttps://x.com/3d_hentai1/media\nhttps://www.reddit.com/r/imagus/comments/159jk73/comment/jti74is\nhttps://x.com/otosalex\nhttps://x.com/search?q=example&src=typed_query&f=media\nhttps://x.com/rei_RR/status/1737115628472086910"}}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement