কোড গল্ফ ইমেজ ডাউনলোডার


20

সতর্কতা: উত্তরগুলি কিছু কোড গল্ফদের জন্য কার্যকর হতে পারে।

অনেকগুলি চ্যালেঞ্জগুলিতে, পোস্টটিতে চিত্রগুলি থাকে, যা সমস্যাটিতে কাজ করতে সক্ষম হতে একটি ফাইলে সংরক্ষণ করতে হবে। এটি একটি বিশেষ করে ক্লান্তিকর ম্যানুয়াল কাজ। আমাদের প্রোগ্রামারদের এ জাতীয় কটূক্তি করতে হবে না। আপনার কাজ হ'ল কোড গল্ফ.এসই প্রশ্নে থাকা সমস্ত চিত্র স্বয়ংক্রিয়ভাবে ডাউনলোড করা।

বিধি

  • আপনার প্রোগ্রামটি যে কোনও অংশের stackexchange.comসাথে সংযুক্ত হতে পারে তবে চিত্রগুলির অবস্থানগুলি বাদ দিয়ে অন্য কোনও ডোমেনের সাথে সংযোগ নাও করতে পারে (যেমন, কোনও URL সংক্ষিপ্তকারীকে বিরক্ত করবেন না)।
  • কমান্ড লাইন বা স্টিডিনে ইনপুট হিসাবে একটি পূর্ণসংখ্যা এন দেওয়া হয়।
  • ইউআরএল একটি কোড গল্ফ প্রশ্নের একটি বৈধ লিঙ্ক হতে গ্যারান্টিযুক্ত।http://codegolf.stackexchange.com/questions/N
  • প্রশ্ন এন এর শিরোনামে প্রদর্শিত প্রতিটি চিত্র অবশ্যই স্থানীয় কম্পিউটারের একটি ফাইলে সংরক্ষণ করতে হবে। নিম্নলিখিত অবস্থানগুলির যে কোনওটি গ্রহণযোগ্য:
    • বর্তমান ডিরেক্টরি
    • ব্যবহারকারীর দ্বারা একটি ডিরেক্টরি ইনপুট
  • আপনার প্রোগ্রামটি অবশ্যই প্রশ্নবিত্তের চিত্রগুলি ব্যতীত অন্য ফাইলগুলি সংরক্ষণ করবে না (যেমন ব্যবহারকারী অবতার, বা উত্তরে থাকা চিত্রগুলি)।
  • চিত্রগুলি মূল ফাইলের একই এক্সটেনশান সহ সংরক্ষণ করতে হবে।

এটি একটি - আপনার পক্ষে সবচেয়ে সংক্ষিপ্ততম প্রোগ্রামটি লিখুন।

উত্তরের জন্য বৈধতার মানদণ্ড

একই নামের একাধিক চিত্র, এইচটিএমএল উপাদান হিসাবে একই নামের পাঠ্য ইত্যাদি সহ বিভিন্ন সম্ভাব্য প্রান্তের মামলা রয়েছে। 10 জানুয়ারী, 2015 এর পূর্বে পোস্ট করা কোনও প্রশ্নের পুনর্বিবেচনায় যদি কোনও উত্তর ব্যর্থ হতে দেখানো হয় তবেই কেবল উত্তর বাতিল করা হবে will ।


চিত্রের নামগুলি যদি একই থাকে বা আমরা 0.png, 1.png ইত্যাদির মতো করতে পারি
স্টোকাস্টিক

@ স্টটাস্টিক আপনি যে অংশটি চান তার এক্সটেনশনের আগে অংশটির নাম রাখতে পারবেন (যতক্ষণ না আপনি আগের নামটি দু'বার ব্যবহার করবেন না, আগের ফাইলটি ওভাররাইট করে)।
শুক্রবার 12'15

উত্তর:


10

গণিত, 211 210 বাইট

i=Import;FileNameTake@#~Export~i@#&/@ImportString["body"/.("items"/.i["http://api.stackexchange.com/2.2/questions/"<>InputString[]<>"?site=codegolf&filter=!*Lgp.gEWHA6BNP.l","JSON"])[[1]],{"HTML","ImageLinks"}]

Ungolfed:

i = Import;
FileNameTake@#~Export~i@# & /@ 
 ImportString[
  "body" /. (
    "items" /. 
      i["http://api.stackexchange.com/2.2/questions/" <> 
        InputString[] <> "?site=codegolf&filter=!*Lgp.gEWHA6BNP.l", 
       "JSON"]
  )[[1]], 
  {"HTML", "ImageLinks"}
 ]

এটা বেশ সোজা। আমি স্ট্যাক এক্সচেঞ্জ এপিআইয়ের জন্য একটি ফিল্টার সেট আপ করেছি , যা কেবলমাত্র একটি প্রশ্নের মূল অংশ দেয়। কোডটি সেই ফিল্টারটির সাথে প্রশ্ন সম্পর্কিত তথ্য পুনরুদ্ধার করে এবং এটিকে JSON হিসাবে পার্স করে। আমি সঠিক উপাদানটি (দেহ) নির্বাচন করেছি এবং ImportStringএইচটিএমএলকে বিশ্লেষণ করতে এবং সমস্ত চিত্রের ইউআরএল ফিল্টার আউট ব্যবহার করি । FileNameTake@#~Export~Import@#তারপরে প্রতিটি চিত্র ডাউনলোড করে এটি ইউআরএল-তে থাকা ফাইলের নামের সাথে বর্তমান কার্য ডিরেক্টরিতে সঞ্চয় করে stores

আপনি বর্তমান ওয়ার্কিং ডিরেক্টরিটি এটির সাথে খুঁজে পেতে পারেন Directory[]

নীতিগতভাবে, একটি আরও সংক্ষিপ্ত সংস্করণ রয়েছে, কারণ ImportStringআমাকে কেবল URL গুলি না দিয়ে প্রকৃতপক্ষে সমস্ত ফাইল ডাউনলোড করতে পারে। তবে তারপরে আমি মূল ফাইলের প্রকারের তথ্য হারাব (যেহেতু সেগুলি Imageডাউনলোডের পরে বস্তুতে রূপান্তরিত হয় ), তাই আমি কেবল তাদের সমস্তকে একই ধরণের হিসাবে সংরক্ষণ করতে পারি (পিএনজি, বলুন)।


8

জাভাস্ক্রিপ্ট - 149 161 বাইট

$.get("http://codegolf.stackexchange.com/q/"+prompt(),function(e){$(".post-text:first img",e).each(function(e,t){$('<a href="'+t.src+'"download>')[0].click()})})

সাদা স্থান সহ

$.get('http://codegolf.stackexchange.com/q/' + prompt(), function(d) {
  $('.post-text:first img',d).each(function(i,e){
   $('<a href="' + e.src + '"download>')[0].click();
  })
})

স্ক্রিপ্টটি স্ট্যাকেক্সচেঞ্জ সাইট থেকে কাজ করতে হবে। প্রম্পটে কোনও প্রশ্ন নম্বর নির্দিষ্ট না করা থাকলে বর্তমান পৃষ্ঠায় ডিফল্ট হবে


1
উপরে উল্লিখিত @doorknob হিসাবে আপনি প্রশ্নের জন্য Q অদলবদল করে কিছুটা সাশ্রয় করতে পারেন। এবং যদি আপনি পৃষ্ঠার পোস্টগুলিতে সমস্ত চিত্র পেতে আপত্তি না করেন তবে আপনি $('[src*="imgur"]',d)বিশ্বাস করতে পারেন । আমি পছন্দ করি যে এটি কনসোলে চালানো যেতে পারে - তাত্ক্ষণিক তৃপ্তি।
জোশিয়ার

1
questionsএতে সংক্ষিপ্ত করা যেতে পারে q, তবে এতে codegolf.stackexchange.comপৃষ্ঠায় থাকার উপর নির্ভর করে অংশটি অন্তর্ভুক্ত করা উচিত । @ জোশিয়ার পোস্টে অন্যান্য ডোমেনের চিত্রগুলি অন্তর্ভুক্ত করা সম্ভব।
ফেয়ারসুম

1
নির্বাচককে #question .post-text imgছোট করা যেতে পারে .post-text:first imgবা .post-text:eq(0) img
cPu1

5

পাইথন 2 - 241 বাইট

খুব সোজা, সম্ভবত আরও গল্ফ করা যেতে পারে। আমি img src=প্রথম ঘটনার post-textএবং /divতত্ক্ষণিকভাবে নিম্নলিখিতগুলির মধ্যে সমস্ত ঘটনার জন্য সাইটটি অনুসন্ধান করি। প্রতিটি চিত্রের ইউআরএল তখন কর্ম ডিরেক্টরিতে পড়ে এবং সেভ করা হয়।

import string,sys,urllib,re;o=string.find;u=urllib.urlopen
r=u("http://codegolf.stackexchange.com/q/"+sys.argv[1]).read()
i=o(r,"post-text")
for p in re.findall(r'img src="([^"]*)',r[i:o(r,"/div",i)]):f=open(p[-9:],"wb");f.write(u(p).read())

ফাইলের নামগুলি যেমন রাখা হয় - নামটি [-9:]চিত্রের url এর সর্বশেষ 9 বাইট ( ) হিসাবে নেওয়া হয় , এটির 5 টি অক্ষরের নাম এবং একটি .pngবা .jpgইত্যাদি রাখা উচিত এটি এক্সটেনশন 3 টি অক্ষরের বেশি হলে ফাইলের বাইটগুলি কেটে ফেলবে ।
স্টকাস্টিক

ফাইলের নামটি 9 বাইটের চেয়ে কম হলে কী হবে? এটি কি ফাইলের নামটিতে একটি স্ল্যাশ অন্তর্ভুক্ত করবে না?
মার্টিন এেন্ডার

forলুপটিকে একটি লাইন তৈরি করে আপনি 2 বাইট সংরক্ষণ করতে পারেন । for p re.findall(...):f=open(...);f.write(...)
আন্ডারগ্রাউন্ডোমোনাইল

@mar আমি মনে করি না ফাইলের নাম 9 বাইট কম হতে পারে, কিন্তু আমি ভুল হতে পারে
undergroundmonorail

@ মার্টিনব্যাটনার আমি মনে করি 9 বাইটগুলি একটি যুক্তিসঙ্গত অনুমান, তবে আপনি যদি মনে করেন আমার উচিত তবে আমি এটি পরিবর্তন করতে পারি। এটি মূল্যবান - কেবল 6 বা 7 বাইট ব্যবহার করা সম্ভবত যথেষ্ট এবং তবুও স্বতন্ত্র ফাইলের নামগুলি গ্যারান্টিযুক্ত।
স্টোকাস্টিক

2

গণিত, 195

x=XMLElement;c=Cases;i=Import;l=Infinity;FileNameTake@#~Export~i@#&/@(((c[#,x["img",{"src"->e_,_},___]:>e,l]&)@*(c[#,x[_,{__,"id"->"question",__},e_]:>e,l]&)@*(i[#,"XMLObject"] &))@InputString[])

এটি মার্টিন তার গণিত সমাধানে যেভাবে চিত্রগুলি রফতানি করেছিল সে সম্পর্কে আরও তথ্যের জন্য তার উত্তরটি পড়ুন। আমি এইচটিএমএল পৃষ্ঠাটি সরাসরি পার্স করে এপিআই থেকে ফলাফল পার্স করার পরিবর্তে এই পদ্ধতির তার থেকে খুব আলাদা। বা বরং, আমি গাণিতিক HTML থেকে উত্পন্ন করতে পারে এমন প্রতীকী এক্সএমএলকে বিশ্লেষণ করি।


1

পাইথন 2 - 398 342 334 বাইট

প্রোগ্রামটি এসই পৃষ্ঠাটি ডাউনলোড করে, পোস্ট অংশটি (পোস্ট-পাঠ্য ডিভ উপাদানটি) বের করে, ইউআরএলগুলি খুঁজে পায় যা একটি চিত্রের এক্সটেনশনে শেষ হয় এবং সেগুলি ডাউনলোড করে। img<n>.<ext>বর্তমান ডিরেক্টরি হিসাবে চিত্রগুলি সংরক্ষণ করা হয়।

import urllib2 as u,re,sys
z=u.urlopen;i=1
p=z('http://codegolf.stackexchange.com/q/'+sys.argv[1]).read()
s=re.search(r'ss="po(.+?)/di',p,16).group(1)
for L in re.findall('"(h.+?://.*?)"',s):
 b=L.rsplit('.',1)
 if len(b)==2 and b[1].lower() in 'jpg jpeg png gif bmp'.split():
  open('img%u.%s'%(i,b[1]),'wb').write(z(L).read());i+=1

এই প্রোগ্রামটি এম্বেড থাকা চিত্রগুলি নয়, লিংক হিসাবে সরবরাহ করা চিত্রগুলিও ডাউনলোড করবে। প্রতিটি চিত্রকে একটি অনন্য ফাইলের নাম দিয়ে, নামের সংঘাতগুলিও এড়ানো যায়।


2
আপনি প্রতিস্থাপন 8 অক্ষর সংরক্ষণ করতে পারবেন questionsসঙ্গে q(URL- এর মধ্যে)।
ডোরকনবব

43274 প্রশ্নে আমি কেবল 11 টি চিত্র দেখতে পাচ্ছি, তবে 21 টি ডাউনলোড হয়েছে।
শুক্রবার 12'15

আমার প্রোগ্রামটি 10 ​​টি উচ্চ থাম্বনেইলের পাশাপাশি উচ্চ রেজোলিউশন চিত্রগুলি ডাউনলোড করে। আমি নিশ্চিত নই যে অন্যান্য এন্ট্রিগুলি উচ্চ রেজোলিউশন সংস্করণ আনবে।
লজিক নাইট 17

@ ডুরকনব - ধন্যবাদ আমি সেটা মিস করছিলাম. অন্য ছেলেদের ধরার জন্য আমার আরও অনেক কিছুর প্রয়োজন হবে।
লজিক নাইট

1
@ কার্পেট পাইথন যদিও এটি তাত্ক্ষণিকভাবে আরও কার্যকর ... তবে এই চিত্রটির উদ্দেশ্যটি কেবল দৃশ্যমান চিত্রগুলি ডাউনলোড করা ছিল।
শুক্রবার

1

বাশ - 86 বাইট

wget -r -l1 -np -Ajpg,jpeg,png,bmp,gif http://codegolf.stackexchange.com/questions/$1

কিছুই উইজেট ঠিক করবে না। -npউইজেটকে উপরের ডিরেক্টরিতে প্রবেশ করতে বাধা দেয় (ব্যবহারকারী ইমাগগুলি) -Aউপস্থাপিত তালিকার সাথে মেলে এমন এক্সটেনশনটি দিয়ে কেবল ফাইলগুলি ধরে। -rএকটি পুনরাবৃত্ত ডাউনলোড। -lউইজেটকে খুব গভীর থেকে বাধা দেয়। $1প্রশ্ন দখল করার জন্য।


1
এটি কাজ করার জন্য আমার কিছু নির্দিষ্ট করার দরকার আছে? আমি কয়েকটি প্রশ্নে এটি চেষ্টা করেছিলাম, তবে ভাল নয়। এখানে আউটপুট ।
Geobits

1
আমি মনে করি OU প্রতিস্থাপন 8 অক্ষর সংরক্ষণ করতে পারবেন questionsসঙ্গে qURL- এ।
টিমটেক

1

নোড.জেএস, 251 247 বাইট

r=require,g=r('request'),g('http://codegolf.stackexchange.com/q/'+process.argv[2],function(_,_,b){r('cheerio').load(b)('#question .post-text img').each(function(i,a){s=a.attribs.src,g(s).pipe(r('fs').createWriteStream(i+r('path').basename(s)))})})

requestHTTP GETগুলি তৈরি করতে এবং cheerioএইচটিএমএলকে বিশ্লেষণ করতে ব্যবহার করে । নামের সংঘর্ষগুলি ফাইলের ইউআরএলটির বেসনামে বর্তমান চিত্রের সূচি প্রিপেন্ড করে সমাধান করা হয়। চিত্রগুলি বর্তমান ফাইলের মতো একই ডিরেক্টরিতে সংরক্ষণ করা হয়।


1

লুয়া, 200 বাইট

r=require'socket.http'.request r('http://codegolf.stackexchange.com/questions/'.. ...):gsub('post.text(.-)div',function(p)p:gsub('src="(.-)"',function(i)io.open(i:sub(-9),'wb'):write((r(i)))end)end)

নম্বরটি একটি কমান্ড-লাইন আর্গুমেন্ট হিসাবে গ্রহণ করে।

ধরে নিন যে কোনও src=বৈশিষ্ট্য কোনও imgট্যাগের জন্য হবে কারণ এগুলি কেবলমাত্র সেই srcবৈশিষ্ট্যযুক্ত ট্যাগ যা স্ট্যাক এক্সচেঞ্জের অনুমতি দেয় (ডান?)?

এছাড়াও নোট করুন .. ...। আমি সেটার জন্য বিশেষভাবে গর্বিত।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.