ฉันจะแก้ไข URL การเปลี่ยนเส้นทางจำนวนมากได้อย่างไร


1

ฉันมีไฟล์. csv จะมีลิงก์เป็น aliased / shortened จำนวน 1000 ลิงก์ (เช่น bit.ly เป็นต้น) ฉันต้องการทราบว่าพวกเขาเปลี่ยนเส้นทางไปที่ใด มีโปรแกรมง่าย ๆ ที่สามารถทำงานนี้ให้สำเร็จได้หรือไม่?


เอ่อมีอะไรเกี่ยวกับเรื่องนี้บ้าง?
Hennes

ฉันคิดว่าอาจมีสูตรหรือมาโครที่ฉันไม่รู้ นอกเหนือจากนั้นไม่มีอะไร
memery

3
ฉันจะเริ่มต้นด้วยการมองหาที่และwget curlอาจมี--spiderตัวเลือก นั่นเป็นวิธีแก้ปัญหาเพียงครึ่งเดียว
Hennes

คำตอบ:


2

คุณไม่ได้ระบุระบบปฏิบัติการของคุณ

แต่ใน Linux (เมื่อติดตั้ง Curl และ awk) คุณสามารถทำสิ่งนี้:

#!/bin/bash
while read LINE ; do
  NEWURL=$(curl -sIL $LINE 2>&1 | awk '/^Location/ {print $2}' | tail -n1;)
  echo "$LINE ; $NEWURL"
done < urls.txt

โปรดทราบว่าไซต์ที่ไม่เปลี่ยนเส้นทางจะไม่มีผลลัพธ์หลังจากเว็บไซต์เก่า


2

หากคุณสามารถหาวิธีบันทึกไฟล์เป็นข้อความธรรมดาด้วยหนึ่ง url ต่อบรรทัดคุณสามารถใช้สคริปต์ต่อไปนี้บนเครื่อง Linux / MacOS / * ระวังหรือCygwinบน Windows เพื่อคายไฟล์ข้อความด้วย url

#!/bin/bash
rm resolved_urls.txt
for url in $(cat url.txt); do
        wget -S "$url" 2>&1 | grep ^Location >> resolved_urls.txt
done

คัดลอกข้อความข้างต้นลงในไฟล์ที่ชื่อว่า resol.sh โดยใช้nanoหากคุณต้องการใช้งานด้วยchmod +x resolve.shชื่อไฟล์ด้วย bit.ly URL และอื่น ๆ ไปยัง url.txt เพื่อให้แน่ใจว่ามันอยู่ในโฟลเดอร์เดียวกับไฟล์ resol.sh ./resolve.shและดำเนินการด้วย มันจะสร้างไฟล์ที่ชื่อว่า "resol_urls.txt" ด้วย URL ดั้งเดิมและจะได้รับการแก้ไขแล้ว

เอาท์พุทด้วย

http://bit.ly/1auRnQ9
http://bit.ly/19ZkTAI

ใน url.txt คือ

http://bit.ly/1auRnQ9 --> Location: http://www.google.com/ [following]
http://bit.ly/19ZkTAI --> Location: http://superuser.com/ [following]

สคริปต์นี้ยังห่างไกลจากความสมบูรณ์แบบและอาจก่อให้เกิดความโกรธเกรี้ยวของ Uny greybeardsได้ แต่อย่างน้อยก็ใช้ได้กับ bit.ly แจ้งให้เราทราบหากคุณมีคำถามที่เกี่ยวข้องกับ * ระวัง


ไม่ควรยากที่จะประมวลผล CSV ใหม่ในไฟล์ข้อความธรรมดาเพียงต้องการธุรกิจที่ซุกซนด้วยการตัด
Journeyman Geek

1
คุณไม่สามารถใช้wget -Sและรับการตอบกลับจากเซิร์ฟเวอร์โดยไม่ต้องใช้เอาต์พุต delete_meจากนั้นก็มีความจำเป็นในการไม่มี และคุณสามารถทำได้wget -S $url 2>&1 | grep ^Location >> resolved_urls.txtในหนึ่งบรรทัด (ยังไม่จำเป็นต้องใช้ log.txt :)
Rik

ขอบคุณ Rik ฉันคิดว่าอาจจะมีการตั้งค่าสถานะสำหรับการทำเช่นนั้น แต่ไม่ต้องการใช้เวลานานเกินไปกับปัญหานี้ : P
MetaNova

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.