วิธีดาวน์โหลดไฟล์ KML ของ Google

ฉันรู้ว่าในลิงก์นี้ Google แจ้งว่าไม่มีให้บริการอีกต่อไป

อย่างไรก็ตาม หากคุณเพียงแค่เรียกใช้สคริปต์เพื่อสร้างลิงก์เช่นนี้:

    $timespan = [
        'year'  => '2015',
        'month'=> '0',
        'day'   => '28',
    ];
    $path = 'https://www.google.com/maps/timeline/kml?authuser=0&pb=!1m8!1m3!1i'.$timespan['year'].'!2i'.$timespan['month'].'!3i'.$timespan['day'].'!2m3!1i'.$timespan['year'].'!2i'.$timespan['month'].'!3i'.$timespan['day'];

    echo "<a href='/th".$path."'>link</a>";

คุณจะรู้ว่าคุณสามารถดาวน์โหลดไฟล์ประวัติ kml สำหรับวันที่ที่ระบุได้จริง ซึ่งคุณสามารถสร้างข้อมูลของคุณเองได้อย่างง่ายดาย ปัญหาคือฉันไม่สามารถทำสิ่งนั้นโดยทางโปรแกรมได้ ดังนั้นถ้าฉันไปเปิดเบราว์เซอร์ มันจะดาวน์โหลด แต่ file_get_contents เช่น - แน่นอน - ใช้งานไม่ได้

ฉันพยายามใช้ Inceptor ของบุรุษไปรษณีย์เพื่อส่งคำขออีกครั้งเพื่อให้สามารถเลียนแบบโดยทางโปรแกรมได้ แต่ฉันไม่สามารถส่งคำขอได้สำเร็จ Google ตอบกลับด้วย 400 หน้า

มีวิธีใดที่จะเลียนแบบพฤติกรรมของเบราว์เซอร์เพื่อให้ฉันดาวน์โหลดไฟล์ได้หรือไม่


person Süha Boncukçu    schedule 26.11.2016    source แหล่งที่มา


คำตอบ (1)


คำขอล้มเหลวผ่าน file_get_contentsเนื่องจากเซิร์ฟเวอร์ของ Google กำหนดให้การโทรต้องได้รับอนุญาต จึงสามารถเห็นได้จากรูปภาพด้านล่าง (Cookie ส่วนหัวประกอบด้วยสิ่งที่เรียกว่า โทเค็นการรับรองความถูกต้อง เช่น HSID, SSID และ SID)

ป้อนคำอธิบายรูปภาพที่นี่

เกี่ยวกับโทเค็นการตรวจสอบสิทธิ์

Google ใช้คุกกี้ความปลอดภัย:

เพื่อตรวจสอบสิทธิ์ผู้ใช้ ป้องกันการใช้ข้อมูลรับรองการเข้าสู่ระบบโดยฉ้อโกง และปกป้องข้อมูลผู้ใช้จากบุคคลที่ไม่ได้รับอนุญาต

ตัวอย่าง Python นี้ (ดูฟังก์ชัน GetAuthTokens) สาธิตวิธีการรับโทเค็นการตรวจสอบสิทธิ์

ตัวอย่าง

ตัวอย่างต่อไปนี้สาธิตวิธีการโทร ได้รับอนุญาต โดยการระบุคุกกี้ความปลอดภัย:

$authTokens = array(
   'HSID' => '',
    'SSID' => '',
    'SID' => '',
);

$opts = array(
    'http'=>array(
        'method'=>"GET",
        'header'=>
            'Cookie: HSID=' . $authTokens["HSID"] . '; SSID=' . $authTokens["SSID"] . '; SID=' . $authTokens["SID"]
    )
);

$context = stream_context_create($opts);
$content = file_get_contents($url,false, $context);
person Vadim Gremyachev    schedule 30.11.2016