আমি একটি কমান্ড লাইন প্রোগ্রাম চাই যা কোনও ওয়েবসাইটের শিরোনাম ছাপায়। যেমন:
Alan:~ titlefetcher http://www.youtube.com/watch?v=Dd7dQh8u4Hc
দিতে হবে:
Why Are Bad Words Bad?
আপনি এটি url দিন এবং এটি শিরোনামটি প্রিন্ট করে।
আমি একটি কমান্ড লাইন প্রোগ্রাম চাই যা কোনও ওয়েবসাইটের শিরোনাম ছাপায়। যেমন:
Alan:~ titlefetcher http://www.youtube.com/watch?v=Dd7dQh8u4Hc
দিতে হবে:
Why Are Bad Words Bad?
আপনি এটি url দিন এবং এটি শিরোনামটি প্রিন্ট করে।
উত্তর:
wget -qO- 'http://www.youtube.com/watch?v=Dd7dQh8u4Hc' |
perl -l -0777 -ne 'print $1 if /<title.*?>\s*(.*?)\s*<\/title/si'
recode
এর মতো জিনিস থাকলে আপনি এটি জিএনইউতে পাইপ করতে পারেন <
:
wget -qO- 'http://www.youtube.com/watch?v=Dd7dQh8u4Hc' |
perl -l -0777 -ne 'print $1 if /<title.*?>\s*(.*?)\s*<\/title/si' |
recode html..
- youtube
অংশটি সরাতে :
wget -qO- 'http://www.youtube.com/watch?v=Dd7dQh8u4Hc' |
perl -l -0777 -ne 'print $1 if /<title.*?>\s*(.*?)(?: - youtube)?\s*<\/title/si'
কিছু সীমাবদ্ধতা নির্দেশ করতে:
এইচটিটিপি কোয়েরি করার জন্য কোনও স্ট্যান্ডার্ড / পোর্টেবল কমান্ড নেই। কয়েক দশক আগে, আমি lynx -source
এখানে পরিবর্তে সুপারিশ করা উচিত । তবে আজকাল wget
এটি আরও বহনযোগ্য কারণ এটি বেশিরভাগ জিএনইউ সিস্টেমে ডিফল্টরূপে পাওয়া যায় (বেশিরভাগ লিনাক্স ভিত্তিক ডেস্কটপ / ল্যাপটপ অপারেটিং সিস্টেম সহ)। অন্যান্য মোটামুটি বহনযোগ্য পোর্টেবলগুলির মধ্যে GET
কমান্ডটি অন্তর্ভুক্ত থাকে perl
যা প্রায়শই ইনস্টল হওয়া লিবিউডব্লিউ সাথে আসে lynx -source
এবং কিছুটা কম পরিমাণে curl
। অন্যান্য সাধারণ বেশী অন্তর্ভুক্ত links -source
, elinks -source
, w3m -dump_source
, lftp -c cat
...
wget
উদাহরণস্বরূপ firefox
প্রদর্শিত পৃষ্ঠার মতো একই পৃষ্ঠাটি নাও পেতে পারে । এইচটিটিপি সার্ভারগুলি ক্লায়েন্টের দ্বারা প্রেরিত অনুরোধে প্রদত্ত তথ্যের ভিত্তিতে একটি ভিন্ন পৃষ্ঠা প্রেরণ চয়ন করতে পারে তার কারণ।
উইজেট / ডাব্লু 3 এম / জিইটি ... এর মাধ্যমে প্রেরিত অনুরোধটি ফায়ারফক্সের পাঠানো থেকে আলাদা হতে চলেছে। যদি এটি কোনও সমস্যা হয় wget
তবে বিকল্প হিসাবে অনুরোধটি প্রেরণের পদ্ধতিটি পরিবর্তন করতে আপনি আচরণকে পরিবর্তন করতে পারেন ।
এই বিষয়ে এখানে সর্বাধিক গুরুত্বপূর্ণগুলি হ'ল:
Accept
এবং Accept-language
: এটি সার্ভারকে জানায় যে ক্লায়েন্টটি কোন ভাষাতে এবং চার্সেটে ক্লায়েন্টটি প্রতিক্রিয়া পেতে চায় সেটিকে wget
ডিফল্টরূপে কোনও পাঠায় না যাতে সার্ভার সাধারণত তার ডিফল্ট সেটিংস সহ প্রেরণ করে। firefox
অন্য প্রান্তে সম্ভবত আপনার ভাষার জন্য অনুরোধ করার জন্য কনফিগার করা হয়েছে।User-Agent
: এটি সার্ভারে ক্লায়েন্ট অ্যাপ্লিকেশন সনাক্ত করে। কিছু সাইট ক্লায়েন্টের উপর ভিত্তি করে বিভিন্ন সামগ্রী প্রেরণ করে (যদিও এটি বেশিরভাগ ক্ষেত্রে জাভাস্ক্রিপ্ট ভাষার ব্যাখ্যাগুলির মধ্যে পার্থক্যের জন্য) এবং আপনি যদি কোনও রোবট- টাইপ ব্যবহারকারী এজেন্ট ব্যবহার করেন তবে আপনাকে পরিবেশন করতে অস্বীকার করতে পারে wget
।Cookie
: আপনি যদি এই সাইটটি এর আগে দেখেছেন তবে আপনার ব্রাউজারে এটির জন্য স্থায়ী কুকিজ থাকতে পারে। wget
হবে না.wget
পুনরায়নির্দেশগুলি HTTP প্রোটোকল স্তরে সম্পন্ন করার পরে তা অনুসরণ করবে, তবে যেহেতু এটি পৃষ্ঠাটির বিষয়বস্তুটিতে নজর দিচ্ছে না, জাভাস্ক্রিপ্ট বা এর মতো জিনিস দ্বারা করা হয়েছে না <meta http-equiv="refresh" content="0; url=http://example.com/">
।
এখানে, অলসতার বাইরে, আমরা ট্যাগটি perl
সন্ধান করার আগে পুরো সামগ্রীটি মেমরিতে পড়েছি <title>
। প্রদত্ত যে শিরোনামটি <head>
ফাইলের প্রথম কয়েকটি বাইটে থাকা বিভাগে পাওয়া যায় , এটি অনুকূল নয়। awk
আপনার সিস্টেমে জিএনইউ উপলব্ধ থাকলে আরও ভাল উপায় হতে পারে:
wget -qO- 'http://www.youtube.com/watch?v=Dd7dQh8u4Hc' |
gawk -v IGNORECASE=1 -v RS='</title' 'RT{gsub(/.*<title[^>]*>/,"");print;exit}'
এইভাবে, awk প্রথমটির পরে পড়া বন্ধ করে দেয় </title
এবং প্রস্থান করে wget
ডাউনলোড করা বন্ধ করে দেয়।
এখানে, wget
পৃষ্ঠাটি ডাউনলোড হওয়ার সাথে সাথে লিখেছে। একই সময়ে, perl
তার আউটপুট (slurps -0777 -n
) মেমরি পুরো এবং তারপর HTML কোড দেব যা প্রথম ঘটনার মধ্যে পাওয়া যায় ছাপে <title...>
এবং </title
।
এটি বেশিরভাগ এইচটিএমএল পৃষ্ঠাগুলির জন্য কাজ করবে যেগুলিতে একটি <title>
ট্যাগ রয়েছে, তবে এমন কেস রয়েছে যেখানে এটি কাজ করবে না।
বিপরীতে কফিমেগের সমাধানটি HTML পৃষ্ঠাকে এক্সএমএল হিসাবে বিশ্লেষণ করবে এবং এর সাথে সম্পর্কিত মানটি ফিরিয়ে দেবে title
। পৃষ্ঠাটি বৈধ এক্সএমএল হওয়ার নিশ্চয়তা থাকলে এটি আরও সঠিক । তবে, এইচটিএমএলকে বৈধ এক্সএমএল হওয়া প্রয়োজন নয় (ভাষার পুরানো সংস্করণগুলি ছিল না) এবং বেশিরভাগ ব্রাউজারগুলি লেনিয়েন্ট রয়েছে এবং ভুল এইচটিএমএল কোড গ্রহণ করবে, তাই এখানে অনেকগুলি ভুল HTML কোড রয়েছে।
আমার সমাধান এবং কফিমগ উভয় বিভিন্ন কোণার ক্ষেত্রে ব্যর্থ হবে, কখনও কখনও একই, কখনও কখনও না।
উদাহরণস্বরূপ, আমার এতে ব্যর্থ হবে:
<html><head foo="<title>"><title>blah</title></head></html>
বা:
<!-- <title>old</title> --><title>new</title>
যদিও তার ব্যর্থ হবে:
<TITLE>foo</TITLE>
(বৈধ এইচটিএমএল, এক্সএমএল নয়) বা:
বা:
<title>...</title>
...
<script>a='<title>'; b='</title>';</script>
(আবারও, বৈধ এক্সএমএল করার জন্য বৈধ html
, অনুপস্থিত <![CDATA[
অংশগুলি)।
<title>foo <<<bar>>> baz</title>
(ভুল এইচটিএমএল, তবে এখনও এটি খুঁজে পেয়েছি এবং বেশিরভাগ ব্রাউজার দ্বারা সমর্থিত)
এই সমাধানটি <title>
এবং এর মধ্যে কাঁচা পাঠ্যকে আউটপুট করে </title>
। সাধারণত, সেখানে কোনও এইচটিএমএল ট্যাগ থাকা উচিত নয়, সেখানে সম্ভবত মন্তব্য থাকতে পারে (যদিও ফায়ারফক্সের মতো কিছু ব্রাউজারগুলি এতটা সম্ভব নয়)। এখনও কিছু HTML এনকোডিং থাকতে পারে:
$ wget -qO- 'http://www.youtube.com/watch?v=CJDhmlMQT60' |
perl -l -0777 -ne 'print $1 if /<title.*?>\s*(.*?)\s*<\/title/si'
Wallace & Gromit - The Cheesesnatcher Part 1 (claymation) - YouTube
যার যত্ন নেওয়া জিএনইউ recode
:
$ wget -qO- 'http://www.youtube.com/watch?v=CJDhmlMQT60' |
perl -l -0777 -ne 'print $1 if /<title.*?>\s*(.*?)\s*<\/title/si' |
recode html..
Wallace & Gromit - The Cheesesnatcher Part 1 (claymation) - YouTube
তবে ওয়েব ক্লায়েন্টকে শিরোনামটি প্রদর্শন করার সময় সেই কোডটিতে আরও রূপান্তর করা বোঝানো হয় (যেমন শূন্যের কিছু অংশ ঘনিয়ে দেওয়া, নেতৃস্থানীয় এবং অনুসরণকারীকে সরিয়ে ফেলা)। তবে এটির জন্য কোনও প্রয়োজন হওয়ার সম্ভাবনা কম। সুতরাং, অন্যান্য ক্ষেত্রে যেমন, এটি চেষ্টা করার পক্ষে এটি মূল্যবান কিনা তা সিদ্ধান্ত নেওয়া আপনার পক্ষে।
ইউটিএফ -8 এর আগে, আইএসও 8859-1 অ-এসসিআইআই অক্ষরগুলির জন্য ওয়েবে পছন্দের চার্সেট হিসাবে ব্যবহৃত হত যদিও কড়া ভাষায় সেগুলি লিখতে হয়েছিল é
। এইচটিটিপি এবং এইচটিএমএল ভাষার আরও সাম্প্রতিক সংস্করণগুলি এইচটিটিপি শিরোনামে বা এইচটিএমএল শিরোনামে অক্ষর সেটটি নির্দিষ্ট করার সম্ভাবনা যুক্ত করেছে এবং একটি ক্লায়েন্ট এটি গ্রহণ করা অক্ষরগুলি নির্দিষ্ট করতে পারে। ইউটিএফ -8 আজকাল ডিফল্ট চরসেট হয়ে থাকে।
সুতরাং, যে যে মানে, আপনি করব খুঁজে é
হিসাবে লিখিত é
, যেমন é
, হল UTF-8 যেমন é
2 গত বেশী জন্য, (0xc3 0xa9), iso- 8859-1 (0xe9) হিসাবে, সঙ্গে, অক্ষরসেট উপর মাঝে মাঝে তথ্য HTTP শিরোনাম বা এইচটিএমএল শিরোনামে (বিভিন্ন ফর্ম্যাটে), কখনও কখনও না।
wget
এটি কেবল কাঁচা বাইট পায়, এটি অক্ষর হিসাবে তাদের অর্থের বিষয়ে চিন্তা করে না এবং এটি ওয়েব সার্ভারকে পছন্দের অক্ষর সম্পর্কে জানায় না।
recode html..
আপনার সিস্টেমে ব্যবহৃত অক্ষর সেটের জন্য বাইটের যথাযথ ক্রমে é
বা রূপান্তরিত করার জন্য যত্ন নেবে é
, তবে বাকীগুলির জন্য, এটি আরও জটিল।
যদি আপনার সিস্টেমের চরসেটটি অফ -8 হয় তবে এটি বেশিরভাগ সময় ঠিকঠাক হয়ে যাবে কারণ আজকাল সেখানে ব্যবহৃত ডিফল্ট চরসেট হিসাবে দেখা যায়।
$ wget -qO- 'http://www.youtube.com/watch?v=if82MGPJEEQ' |
perl -l -0777 -ne 'print $1 if /<title.*?>\s*(.*?)\s*<\/title/si'
Noir Désir - L'appartement - YouTube
এটি é
উপরে একটি ইউটিএফ -8 ছিল é
।
তবে আপনি যদি অন্যান্য চারসেটের জন্য কভার করতে চান তবে আবার এটির যত্ন নেওয়া উচিত।
এটিও লক্ষ করা উচিত যে এই সমাধানটি ইউটিএফ -16 বা ইউটিএফ -32 এনকোডযুক্ত পৃষ্ঠাগুলির জন্য মোটেও কাজ করবে না।
আদর্শভাবে, আপনার এখানে যা প্রয়োজন তা হল তথ্য দেওয়ার জন্য একটি আসল ওয়েব ব্রাউজার। এটি হ'ল, সঠিক পরামিতিগুলির সাথে আপনার HTTP অনুরোধটি করার কিছু দরকার, HTTP প্রতিক্রিয়াটি সঠিকভাবে ব্যাখ্যা করতে, এইচটিএমএল কোডটিকে ব্রাউজার হিসাবে পুরোপুরি ব্যাখ্যা করতে এবং শিরোনামটি ফিরিয়ে আনতে হবে।
যেহেতু আমি জানি না যে কমান্ড লাইনে আমি জানি ব্রাউজারগুলির সাথে এটি করা সম্ভব (যদিও এখন এই কৌশলটি দিয়ে দেখুনlynx
), আপনাকে হিউরিস্টিক্স এবং আনুমানিকতা অবলম্বন করতে হবে এবং উপরের একটিটি যে কোনওটির মতোই দুর্দান্ত।
আপনি পারফরম্যান্স, সুরক্ষাও বিবেচনায় নিতে চাইতে পারেন ... উদাহরণস্বরূপ, সমস্ত কেস কভার করার জন্য (উদাহরণস্বরূপ, একটি ওয়েব পৃষ্ঠা যা কোনও তৃতীয় পক্ষের সাইট থেকে কিছু জাভাস্ক্রিপ্ট টানা আছে যা শিরোনাম সেট করে বা একটিতে অন্য পৃষ্ঠায় পুনঃনির্দেশিত করে অনলোড হুক), আপনাকে তার ডম এবং জাভাস্ক্রিপ্ট ইঞ্জিন সহ একটি বাস্তব জীবন ব্রাউজারটি প্রয়োগ করতে হতে পারে যা একক এইচটিএমএল পৃষ্ঠার জন্য কয়েকশ জিজ্ঞাসা করতে হতে পারে, যার মধ্যে কয়েকটি দুর্বলতা কাজে লাগানোর চেষ্টা করছে ...
HTML কে পার্স করতে regexps ব্যবহার করার সময় প্রায়শই ভ্রূণরঞ্জন করা হয় , এখানে একটি সাধারণ কেস রয়েছে যেখানে এটি টাস্কের জন্য যথেষ্ট উপযুক্ত (আইএমও)।
<
যেহেতু শিরোনামগুলির শেষ ট্যাগ থাকার গ্যারান্টি নেই এবং অন্য কোনও ট্যাগের সমাপ্তিটি বাধ্য করা উচিত। আপনি নতুন লাইন ফেলা করতে চাইতে পারেন।
এছাড়াও আপনি চেষ্টা করে দেখতে পারেন hxselect
(থেকে এইচটিএমএল-এক্সএমএল-utils সঙ্গে) wget
নিম্নরূপ:
wget -qO- 'http://www.youtube.com/watch?v=Dd7dQh8u4Hc' | hxselect -s '\n' -c 'title' 2>/dev/null
আপনি ইনস্টল করতে পারেন hxselect
ব্যবহার ডেবিয়ান ভিত্তিক ডিস্ট্রো মধ্যে:
sudo apt-get install html-xml-utils
।
STDERR পুনঃনির্দেশ Input is not well-formed. (Maybe try normalize?)
বার্তা এড়ানো হয় ।
"- YouTube" থেকে মুক্তি পাওয়ার জন্য উপরের কমান্ডের আউটপুটটি পাইপ করুন awk '{print substr($0, 0, length($0)-10)}'
।
sudo apt-get install html-xml-utils
hxselect
।
brew install html-xml-utils
।
এছাড়াও আপনি ব্যবহার করতে পারেন curl
এবং grep
এই কাজ করতে। আপনি ব্যবহার পক্ষভুক্ত করতে হবে PCRE (পার্ল সামঞ্জস্যপূর্ণ রেগুলার এক্সপ্রেশন) মধ্যে grep
যাতে আমরা জানতে পারেন পিছনে তাকান পেতে এবং সুবিধা এগিয়ে দেখুন <title>...</title>
ট্যাগ।
$ curl 'http://www.youtube.com/watch?v=Dd7dQh8u4Hc' -so - | \
grep -iPo '(?<=<title>)(.*)(?=</title>)'
Why Are Bad Words Bad? - YouTube
curl
সুইচ:
-s
= নীরব-o -
= STDOUT এ আউটপুট প্রেরণ করুনgrep
সুইচ:
-i
= ক্ষেত্রে সংবেদনশীলতা-o
= মেলে কেবল সেই অংশটি ফেরত দিন-P
= পিসিআরই মোডপ্যাটার্ন grep
:
(?<=<title>)
= এটির বামদিকে শুরু হওয়া একটি স্ট্রিং সন্ধান করুন(?=</title>)
= এর ডানদিকে শেষ হওয়া একটি স্ট্রিং সন্ধান করুন(.*)
= এর মাঝে সমস্ত কিছু <title>..</title>
।যদি <title>...</titie>
একাধিক লাইন বিস্তৃত হয়, তবে উপরেরটি এটি খুঁজে পাবে না। আপনি tr
কোনও \n
অক্ষর, অর্থাৎ মুছতে ব্যবহার করে এই পরিস্থিতি প্রশমিত করতে পারেন tr -d '\n'
।
নমুনা ফাইল।
$ cat multi-line.html
<html>
<title>
this is a \n title
</TITLE>
<body>
<p>this is a \n title</p>
</body>
</html>
এবং একটি নমুনা রান:
$ curl 'http://www.jake8us.org/~sam/multi-line.html' -so - | \
tr -d '\n' | \
grep -iPo '(?<=<title>)(.*)(?=</title>)'
this is a \n title
যদি <title>
সেটটি এমনভাবে সেট করা থাকে, <title lang="en">
তবে grep
এটির আগে আপনাকে এটি সরিয়ে ফেলতে হবে। সরঞ্জামটি sed
এটি করতে ব্যবহৃত হতে পারে:
$ curl 'http://www.jake8us.org/~sam/multi-line.html' -so - | \
tr -d '\n' | \
sed 's/ lang="\w+"//gi' | \
grep -iPo '(?<=<title>)(.*)(?=</title>)'
this is a \n title
উপরেরটি lang=
একটি শব্দ সিকোয়েন্স ( \w+
) এর পরে কেস সংবেদনশীল স্ট্রিংয়ের সন্ধান করে । এটি তখন ছিটকে যায়।
এক পর্যায়ে রেজেক্স এই ধরণের সমস্যা সমাধানে ব্যর্থ হবে। যদি এটি ঘটে থাকে তবে আপনি সম্ভবত একটি আসল এইচটিএমএল / এক্সএমএল পার্সার ব্যবহার করতে চান। এরকম একটি পার্সার হলেন নোকোগিরি । এটি রুবিতে রত্ন হিসাবে উপলব্ধ এবং এটির মতো ব্যবহার করা যেতে পারে:
$ curl 'http://www.jake8us.org/~sam/multi-line.html' -so - | \
ruby -rnokogiri -e \
'puts Nokogiri::HTML(readlines.join).xpath("//title").map { |e| e.content }'
this is a \n title
উপরেরটি curl
এইচটিএমএল ( Nokogiri::HTML
) হিসাবে আসে এমন ডেটা বিশ্লেষণ করছে । xpath
এরপরে পদ্ধতিটি এইচটিএমএলে নোড (ট্যাগ) সন্ধান করে যা লিফ নোড, ( //
) নামের সাথে title
। প্রত্যেকটির জন্য আমরা এর সামগ্রী ( e.content
) ফিরিয়ে দিতে চাই । puts
তারপর তাদের আউট ছাপে।
আপনি পার্ল এবং এইচটিএমএল :: ট্রিবিল্ডার :: এক্সপথ মডিউলটির সাথেও অনুরূপ কিছু করতে পারেন ।
$ cat title_getter.pl
#!/usr/bin/perl
use HTML::TreeBuilder::XPath;
$tree = HTML::TreeBuilder::XPath->new_from_url($ARGV[0]);
($title = $tree->findvalue('//title')) =~ s/^\s+//;
print $title . "\n";
তারপরে আপনি এই স্ক্রিপ্টটি এভাবে চালাতে পারেন:
$ ./title_getter.pl http://www.jake8us.org/~sam/multi-line.html
this is a \n title
<title>Unix\nLinux</title>
বোঝানো হয়েছে Unix Linux
, নয় UnixLinux
।
এইচটিএমএল পার্স করার জন্য সরল রেজেেক্স ব্যবহার করা নিষ্পাপ। উদাহরণস্বরূপ নিউলাইনগুলি সহ এবং ফাইলটিতে বর্ণিত বিশেষ অক্ষর এনকোডিং উপেক্ষা করে। সঠিক কাজটি করুন এবং অন্যান্য উত্তরে উল্লিখিত অন্য কোনও আসল পার্সার ব্যবহার করে পৃষ্ঠাটি সত্যই পার্স করুন বা নীচের একটি লাইনার ব্যবহার করুন:
python -c "import bs4, urllib2; print bs4.BeautifulSoup(urllib2.urlopen('http://www.crummy.com/software/BeautifulSoup/bs4/doc/')).title.text"
(উপরের একটি ইউনিকোড অক্ষর অন্তর্ভুক্ত)
বিউটিউসসপ হ'ল প্রচুর ভুল এইচটিএমএল (উদাহরণস্বরূপ ক্লোজিং ট্যাগগুলি নিখোঁজ করা) হ্যান্ডেল করে, এটি সম্পূর্ণ সরলিক পুনর্নির্মাণকে ছুঁড়ে ফেলবে। আপনি এটি ব্যবহার করে এটি একটি স্ট্যান্ডার্ড পাইথনে ইনস্টল করতে পারেন:
pip install beautifulsoup4
বা আপনার যদি না থাকে তবে pip
সাথে
easy_install beautifulsoup4
কিছু অপারেটিং সিস্টেম যেমন ডেবিয়ান / উবুন্টুতেও এটি প্যাকেজড ( python-bs4
ডেবিয়ান / উবুন্টুতে প্যাকেজ) রয়েছে।
bs4
পাইথন স্ট্যান্ডার্ড লাইব্রেরিতে নেই। আপনাকে এটি ইনস্টল করতে হবে easy_install beautfulsoup4
(না easyinstall bs4
) ব্যবহার করে ।
হতে পারে এটি "প্রতারণা" তবে একটি বিকল্প হ'ল পিপ, একটি কমান্ড লাইন এইচটিএমএল পার্সার ।
এটি করার দুটি উপায় এখানে রয়েছে:
বৈশিষ্ট্য meta
সহ ক্ষেত্রটি ব্যবহার করাproperty="og:title
$ wget -q 'http://www.youtube.com/watch?v=Dd7dQh8u4Hc' -O - | \
> pup 'meta[property=og:title] attr{content}'
Why Are Bad Words Bad?
এবং অন্য title
উপায়টি সরাসরি ক্ষেত্রটি ব্যবহার করে (এবং তারপরে - YouTube
স্ট্রিংটি শেষের দিকে বন্ধ করে দেওয়া )।
$ wget -q 'http://www.youtube.com/watch?v=Dd7dQh8u4Hc' -O - | \
> pup 'title text{}' | sed 's/ - YouTube$//'
Why Are Bad Words Bad?
--plain
বিকল্পটি ব্যবহার করতে চাইতে পারেন ।
lynx
এই কৌশলটি ব্যবহার করে এটি সম্ভব বলে মনে হচ্ছে ( zsh
, bash
সিনট্যাক্স):
lynx -cfg=<(printf '%s\n' 'PRINTER:P:printf "%0s\\n" "$LYNX_PRINT_TITLE">&3:TRUE'
) lynx 3>&1 > /dev/null -nopause -noprint -accept_all_cookies -cmd_script <(
printf '%s\n' "key p" "key Select key" "key ^J" exit
) 'http://www.youtube.com/watch?v=Dd7dQh8u4Hc'
যেহেতু এটি একটি বাস্তব জীবনের ওয়েব ব্রাউজার, এটি আমার অন্যান্য উত্তরে আমি যে সীমাবদ্ধতাগুলি উল্লেখ করেছি তার অনেকগুলিই ভোগ করে না ।
এখানে, আমরা এমন তথ্য ব্যবহার করছি যা পৃষ্ঠাটি মুদ্রণের সময় বর্তমান পৃষ্ঠার শিরোনামে পরিবেশের পরিবর্তনশীল lynx
সেট করে $LYNX_PRINT_TITLE
।
উপরে, আমরা একটি কনফিগারেশন ফাইল দিচ্ছি (পাইপ হিসাবে) যা একটি লিঙ্ককে "প্রিন্টার" সংজ্ঞায়িত করে P
যা কেবল সেই পরিবর্তনশীলের সামগ্রীটিকে ফাইল বর্ণনাকারীর আউটপুট করে দেয় 3
(সেই ফাইল বিবরণকারীকে স্টাডআউটে পুনর্নির্দেশ করা lynx
হয় 3>&1
যখন লিংক্স স্টাডআউট নিজেই পুনঃনির্দেশিত হয়) to / dev / null)।
তারপরে আমরা lynx
স্ক্রিপ্টিং সুবিধাটি ব্যবহারকারীর টিপুন p
, এবং End
(ওরফে নির্বাচন করুন), এবং Enter
( ^J
) অনুকরণ করতে ব্যবহার করি ।
-accept_all_cookies
অন্যথায় লিঙ্ক প্রতিটি কুকির জন্য নিশ্চিতকরণের জন্য ব্যবহারকারীকে জিজ্ঞাসা করবে।
লিনেক্স এবং এলওয়াইএনএক্সএপিআরআইএনপিটিএল ব্যবহার করার জন্য আমি স্টাফেন চেজেলাসের ধারণাটি পছন্দ করেছি, তবে উবুন্টু 14.04.5 এর অধীনে সেই স্ক্রিপ্টটি আমার পক্ষে কাজ করে নি।
লিনাক্স ব্যবহার করে এবং প্রাক-কনফিগার করা ফাইলগুলি আগে থেকে ব্যবহার করে আমি এর একটি সরলীকৃত সংস্করণ তৈরি করেছি।
নিম্নলিখিত রেখাটি /etc/lynx-cur/lynx.cfg এ যুক্ত করুন (বা যেখানে আপনার lynx.cfg থাকুক না কেন):
PRINTER:P:printenv LYNX_PRINT_TITLE>/home/account/title.txt:TRUE:1000
এই লাইনটি "/home/account/title.txt" - এ মুদ্রণের সময় শিরোনাম সংরক্ষণের নির্দেশ দেয় - আপনি যে কোনও ফাইলের নাম পছন্দ করতে পারেন। আপনি খুব বড় পৃষ্ঠাগুলির জন্য অনুরোধ করেছেন, উপরের মানটি "1000" থেকে আপনার প্রতি পৃষ্ঠায় যে কোনও সংখ্যক লাইন বাড়িয়ে তুলুন, অন্যথায় লিনেক্স অতিরিক্ত প্রম্পট তৈরি করবে "খুব বড় সংখ্যক পৃষ্ঠাগুলিযুক্ত ডকুমেন্ট মুদ্রণ করার সময়"।
তারপরে নিম্নলিখিত বিষয়বস্তুগুলির সাথে /home/account/lynx-script.txt ফাইলটি তৈরি করুন:
key p
key Select key
key ^J
exit
তারপরে নিম্নলিখিত কমান্ড-লাইন বিকল্পগুলি ব্যবহার করে লিংক চালান:
lynx -term=vt100 -display_charset=utf-8 -nopause -noprint -accept_all_cookies -cmd_script=/home/account/lynx-script.txt "http://www.youtube.com/watch?v=Dd7dQh8u4Hc" >/dev/nul
এই কমান্ডটি শেষ করার পরে /home/account/title.txt ফাইলটি আপনার পৃষ্ঠার শিরোনাম দিয়ে তৈরি করা হবে।
দীর্ঘ গল্প সংক্ষিপ্ত, এখানে একটি পিএইচপি ফাংশন যা প্রদত্ত URL এর উপর ভিত্তি করে কোনও পৃষ্ঠা শিরোনাম প্রদান করে, বা ত্রুটির ক্ষেত্রে মিথ্যা false
function GetUrlTitle($url)
{
$title_file_name = "/home/account/title.txt";
if (file_exists($title_file_name)) unlink($title_file_name); // delete the file if exists
$cmd = '/usr/bin/lynx -cfg=/etc/lynx-cur/lynx.cfg -term=vt100 -display_charset=utf-8 -nopause -noprint -accept_all_cookies -cmd_script=/home/account/lynx-script.txt "'.$url.'"';
exec($cmd, $output, $retval);
if (file_exists($title_file_name))
{
$title = file_get_contents($title_file_name);
unlink($title_file_name); // delete the file after reading
return $title;
} else
{
return false;
}
}
print GetUrlTitle("http://www.youtube.com/watch?v=Dd7dQh8u4Hc");
নোকোগিরি ব্যবহার করে, ট্যাগের অভ্যন্তরীণ পাঠ্য এক্সট্র্যাক্ট করতে কেউ একটি সাধারণ সিএসএস-ভিত্তিক ক্যোয়ারী ব্যবহার করতে পারেন:
$ nokogiri -e 'puts $_.at_css("title").content'
Why Are Bad Words Bad? - YouTube
একইভাবে, ট্যাগের "বিষয়বস্তু" বৈশিষ্ট্যের মানটি বের করতে:
$ nokogiri -e 'puts $_.at_css("meta[name=title]").attr("content")'
Why Are Bad Words Bad?