ใช้ GeoIP เพื่อแปลงข้อมูลที่น่าเบื่อเป็นประสบการณ์ผู้ใช้ที่ดีขึ้น

เผยแพร่แล้ว: 2018-09-11

คนเป็นสิ่งมีชีวิตที่มองเห็นได้ พวกเขาชอบเห็นของสวยงาม (ที่นอกเหนือไปจากวิดีโอเกี่ยวกับแมว) ฉันไม่ได้พูดแบบนี้หรือเพราะฉันสนุกกับมัน! เป็นความจริงที่ยากเย็น จับคู่กับช่วงความสนใจที่ลดลงเรื่อยๆ และมั่นใจได้ว่าแอปพลิเคชันของคุณจะถูกตัดสินโดยรูปลักษณ์ (ใน 3 วินาทีแรก) มากกว่าคุณสมบัติหรือคุณภาพ หากคุณเป็นนักพัฒนาซอฟต์แวร์ที่ไม่สามารถจ่ายเงินสำหรับการออกแบบ GUI แบบกำหนดเองสำหรับแอปได้ สิ่งนี้จะส่งผลเสียอย่างยิ่ง ไม่ว่าแอปของคุณจะดี รวดเร็ว หรือสร้างสรรค์เพียงใดก็ตาม หากดูเหมือนว่า "ออกแบบโดยนักพัฒนาซอฟต์แวร์" ผู้คนจะไม่แม้แต่จะให้โอกาส โชคดีที่มีวิธีแก้ไขปัญหานี้

การใช้เทมเพลตผู้ดูแลระบบโอเพ่นซอร์สที่ได้รับการทดสอบและทดสอบแล้วถือเป็นการเริ่มต้นที่ดีอย่างไม่ต้องสงสัย ดีเท่ากับการใช้บริการบันทึกย่อข้อมูลที่เชื่อถือได้ เคล็ดลับอีกประการหนึ่งที่ไม่ค่อยมีใครรู้จักคือการเปลี่ยนข้อมูลที่น่าเบื่อ เช่น ที่อยู่ IP และตัวระบุตัวแทนผู้ใช้ของเบราว์เซอร์ ให้เป็นข้อมูลที่น่าสนใจมากขึ้น ซึ่งไม่เพียงแต่สามารถให้ข้อมูลแก่ผู้ใช้ได้มากขึ้นเท่านั้น แต่ยังทำให้สนุกและดูดีอีกด้วย สิ่งที่ดีที่สุดคือ – เป็นคุณสมบัติฟรีและตรงไปตรงมาในการเพิ่มไปยังแอพใดๆ

tl;dr วิดีโอของ Cat อยู่ในคิวแล้ว ไปเร็วกัน! โดยไม่ต้องจ้างนักออกแบบทำให้เว็บแอปของคุณดูน่าสนใจขึ้น 10 เท่าโดยใช้ GeoIP และ WhatBrowser เพื่อเพิ่มข้อมูลที่เป็นมิตรต่อมนุษย์และมีประโยชน์ให้กับพวกเขา

วิธีมาตรฐาน น่าเบื่อ และน่าเกลียด

แทนที่จะเสียเวลาไปกับทฤษฎีและประกอบสถานการณ์ เราจะลงลึกในสถานการณ์ที่คุ้นเคยกับเว็บแอปเกือบทั้งหมด ซึ่งจะแสดงข้อมูลบันทึกการดำเนินการของผู้ใช้ในตาราง แม้ว่าข้อมูลจริงจะแตกต่างกันไปในแต่ละระบบ แต่บางฟิลด์ก็เป็นเรื่องปกติ ซึ่งรวมถึงที่อยู่ IP การประทับเวลา และสตริง user-agent การแสดงข้อมูลดิบในตารางเพียงอย่างเดียวส่งผลให้เกิดภัยพิบัติร้ายแรงที่ไม่มีใครอยากดู นับประสาใช้ทุกวัน ดูเหมือนตารางด้านล่าง ออกแบบตัวเองกัน ข้อมูลใช้ไม่ได้เพราะไม่ได้ปรับและจัดรูปแบบสำหรับมนุษย์ ตัวอย่างเช่น ที่อยู่ IP ไม่ใช่สิ่งที่ผู้คนมักจำได้ นั่นเป็นหนึ่งในเหตุผลหลักที่เราใช้ชื่อโดเมน การแสดง IP ในตารางผู้ใช้ปลายทางเช่นนี้ไม่มีประโยชน์อะไร

ไอดี การประทับเวลา IP ตัวแทนผู้ใช้ หนังบู๊
5 2018-09-08 20:03:32 217.92.177.183 Mozilla/5.0 (X11; U; Linux x86_64; de; rv:1.9.2.8) Gecko/20100723 Ubuntu/10.04 (ชัดเจน) Firefox/3.6.8 เข้าสู่ระบบ
4 2018-09-08 06:23:01 170.115.187.68 Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) เช่น Gecko เข้าสู่ระบบ
3 2018-09-07 22:03:12 185.86.151.11 Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 เช่น Mac OS X) AppleWebKit/537.51.1 (KHTML เช่น Gecko) เวอร์ชัน/7.0 Mobile/11A465 Safari/9537.53 รีเซ็ตรหัสผ่าน
2 2018-09-02 14:12:53 67.205.146.29 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:34.0) ตุ๊กแก/20100101 Firefox/34.0 ออกจากระบบ
1 2018-09-02 12:33:43 127.0.0.1 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML เช่น Gecko) Chrome/68.0.3440.106 Safari/537.36 เข้าสู่ระบบล้มเหลว

สำหรับผู้ที่ไม่สามารถรอ – ดูตารางใหม่และปรับปรุง

การปรับเปลี่ยนบางอย่างไปได้ไกล

ขั้นแรกให้เสียคอลัมน์ ID ทำไมทุกคนถึงต้องการ ID บันทึกฐานข้อมูลภายในของคุณ? เป็นข้อมูลที่ไม่มีประโยชน์สำหรับผู้ใช้ของคุณ ใช้พื้นที่หน้าจออันมีค่าและดึงความสนใจออกจากข้อมูลสำคัญ

การประทับเวลาในรูปแบบการประทับเวลาของ MySQL นั้นมนุษย์สามารถอ่านได้ แต่ยังห่างไกลจากความเป็นมิตรต่อผู้ใช้ สิ่งต่างๆ จะยิ่งแย่ลงไปอีกหากคุณเก็บและแสดงเป็น UNIX Timestamp แล้วมันอ่านไม่ได้ 100% ผู้ใช้ที่แตกต่างกัน (โดยปกติขึ้นอยู่กับตำแหน่งของพวกเขา) ชอบการจัดรูปแบบเวลา วันที่ สกุลเงิน และข้อมูลตัวเลขที่แตกต่างกัน ความแตกต่างนั้นบอบบาง แต่ควรได้รับการเคารพ ผู้ใช้ชื่นชมมัน อายุของเหตุการณ์ก็มีความสำคัญเช่นกัน เพื่อความสดใหม่ การแสดงคำอธิบายอย่าง “10 นาทีที่แล้ว” นั้นสะดวก แสดงว่าเป็นกิจกรรมล่าสุด ไม่จำเป็นต้องแสดงการประทับเวลาแบบเต็ม ในขณะที่รุ่นเก่า เราจะแสดงเวลาและวันที่ที่จัดรูปแบบในเครื่องแบบเต็ม

โชคดีที่ WordPress มีฟังก์ชันในตัวเพื่อจัดการกับทุกสิ่ง โดยใช้รูปแบบวันที่และเวลาที่กำหนดไว้ในผู้ดูแลระบบ WP – การตั้งค่า – ทั่วไป เราจะปรับการประทับเวลาให้พอดีกับการจัดรูปแบบของส่วนที่เหลือของไซต์ และด้วยการใช้ human_time_diff() เราจะทำให้มันใช้งานง่าย รหัสต่อไปนี้ถือว่าคุณมีการประทับเวลาในรูปแบบ MySQL แต่ถ้าคุณมีในการประทับเวลา UNIX ให้ลบบรรทัดแรก

function wpr_format_timestamp( $timestamp ) {
  // convert MySQL timestamp to UNIX timestamp
  $timestamp = strtotime( $timestamp );
  
  if ( current_time( 'timestamp' ) - $timestamp > DAY_IN_SECONDS * 1) {
    // our event is older than a day
    // we'll show full timestamp formatted as per WP settings
    $out  = date( get_option( 'date_format', $timestamp );
    $out .= ' @ ' . get_option( 'time_format' ), $timestamp );
  } else {
    // timestamp is not older than a day
    // we'll show a message like "2 hours ago"
    $out  = human_time_diff( $timestamp, current_time( 'timestamp' ) );
    $out .=  ' ago';
  }
  
  return $out;
}

หากคุณต้องการแสดงรูปแบบ "ความแตกต่างของมนุษย์" สำหรับวันที่ที่เก่ากว่าหนึ่งวัน ให้คูณค่าคงที่ DAY_IN_SECOND ด้วยจำนวนวันที่ต้องการ

การใช้ข้อมูล IP ที่น่าเบื่อเพื่อให้ได้เอฟเฟกต์ "ว้าว" ด้วย GeoIP

บริการจำนวนมากเปลี่ยน IP เป็นข้อมูลทางภูมิศาสตร์ที่มนุษย์สามารถอ่านได้ (นี่คือ 20 บริการ geoIP เปรียบเทียบหากคุณต้องการสำรวจ) ซึ่งรวมถึงประเทศ รัฐ เมือง เขตเวลา ข้อมูลสกุลเงิน และรายละเอียด ISP พวกเขาทั้งหมดแบ่งออกเป็นสองประเภท – API ระยะไกลและฐานข้อมูลที่ดาวน์โหลดได้ เนื่องจากการเปลี่ยนแปลงรายวันของข้อมูล geoIP สำหรับโครงการส่วนใหญ่ API จึงเป็นตัวเลือกที่ดีกว่ามาก บริการแตกต่างกันไปในด้านราคา ความสะดวกในการใช้งาน และความแม่นยำของข้อมูลที่ส่งคืน หลังจากใช้บริการต่างๆ มาหลายปี ในช่วงสองปีที่ผ่านมา ฉันใช้ IP Geolocation สำหรับโปรเจ็กต์ขนาดเล็กที่มีคำขอ API มากถึง 50,000 รายการต่อเดือน บริการนี้ฟรีโดยสมบูรณ์ ข้อเสนอที่ยอดเยี่ยมและไร้ความเสี่ยงสำหรับโครงการใดๆ และโดยเฉพาะอย่างยิ่งสำหรับการทดสอบ

การใช้ API เป็นเรื่องง่าย ลงทะเบียนสำหรับบัญชี (ไม่ต้องใช้บัตรเครดิตหรือเรื่องไร้สาระที่คล้ายกัน) คว้าคีย์ API ของคุณจากหน้าบัญชีและเพียงเรียก URL ของ API ด้วยรหัส IP และ API เพื่อรับผลลัพธ์ ในโค้ด (เฉพาะ WordPress) จะดูเหมือนโค้ดด้านล่าง หากคุณไม่ได้ใช้ PHP มี SDK จำนวน 6 ชุดสำหรับ IP Geolocation ดังนั้นคุณจะพบสิ่งที่เหมาะกับโครงการของคุณ พวกเขายังเสนอฐานข้อมูลที่สามารถดาวน์โหลดได้สำหรับโครงการขนาดใหญ่ ติดต่อพวกเขาสำหรับรายละเอียด

function wpr_get_ip_info( $ip ) {
  $endpoint = 'https://api.ipgeolocation.io/ipgeo';
  
  // grab the API key from https://app.ipgeolocation.io/
  // if needed register for a free account, no credit card info needed
  $api_key = 'PUT-YOUR-API-KEY-HERE';
  
  $params = array('apiKey' => $api_key, 'ip' => $ip, 'fields' => 'city,country_name,country_flag');
  $url = $endpoint . '?' . http_build_query($params, '', '&');

  $response = wp_remote_request( $url );
  
  if (is_wp_error($response)) {
    return $response;
  }
  
  if (wp_remote_retrieve_response_code($response) != 200) {
    return new WP_Error('geoip_bad_response', 'Response code ' . wp_remote_retrieve_response_code($response));
  }
  
  $body = wp_remote_retrieve_body($response);
  
  if (empty($body)) {
    return new WP_Error('geoip_bad_response', 'Empty body.');
  }
  
  $body = json_decode($body, true);
  
  // returned variable is an array with following fields: ip, country_name, country_flag, city
  return $body;
}

API ส่งคืนข้อมูล 26 ชิ้นตาม IP – ทดสอบด้วย IP ของคุณ การแสดงทั้งหมดนั้นอาจจะมากเกินไป ฉันจึงมักเลือกใช้ชื่อประเทศ ธงประจำชาติ และเมือง ข้อมูลเพียงพอและการตั้งค่าสถานะจะเพิ่มสัมผัสที่มองเห็นได้อย่างสวยงาม คำขอจะส่งกลับเฉพาะตัวแปรสามตัวนั้น เพื่อประหยัดแบนด์วิธบางส่วน หากคุณต้องการฟิลด์ทั้งหมด ให้ปล่อยคีย์อาร์เรย์ fields ใน $params ว่างไว้ รูปภาพธงประเทศสามารถเชื่อมโยงได้โดยตรงจาก IP Geolocation ซึ่งค่อนข้างสะดวก สำหรับ IP ในพื้นที่ คุณไม่สามารถแสดงได้มากนัก ดังนั้นตรวจสอบให้แน่ใจว่าคุณคำนึงถึงสถานการณ์นั้น คุณจะได้รับ WP_Error พร้อมรหัสตอบกลับ 423 ในกรณีของ IP ในเครื่อง

บริการ #GeoIP ไม่ใช่กลไก ไม่มีใครอยากดูที่อยู่ IP (ให้จำไว้คนเดียว) ให้แสดงชื่อประเทศและเมืองแก่ผู้ใช้แทน! มาดูกันว่าการแปลงข้อมูลที่น่าเบื่อด้วย GeoIP นั้นง่ายเพียงใด

คลิกเพื่อทวีต

สตริง User-agent ซ่อนข้อมูลมากมาย

สตริง user-agent มีขนาดใหญ่และไม่ได้มีไว้สำหรับการบริโภคของมนุษย์โดยตรง ไม่มีความต้องการของมนุษย์ที่มีเหตุผลหรือต้องการข้อมูลทั้งหมดที่แสดงในระเบียบนั้น เราต้องการประเภทของอุปกรณ์ที่ใช้ – คอมพิวเตอร์เดสก์ท็อป โทรศัพท์ หรืออย่างอื่นในระหว่างนั้น จากนั้นระบบปฏิบัติการ – Windows, Mac หรืออย่างอื่น; และอาจเป็นเบราว์เซอร์ที่ใช้: Chrome, Safari, Internet Explorer และ Firefox ซึ่งทำให้ข้อมูลมีโครงสร้างมากขึ้น และแยกข้อมูลออกเป็นสามส่วนเพิ่มเติมที่เป็นประโยชน์สำหรับการกรองและการแบ่งกลุ่ม

ฉันเป็นผู้สนับสนุนอย่างมากในการใช้สิ่งที่คนอื่น (ฉลาดกว่าฉัน) ทำ ดังนั้น เราจะใช้ไลบรารี่ที่พร้อมใช้งาน ผ่านการทดสอบการต่อสู้ และได้รับการดูแลอย่างดีสำหรับการแยกวิเคราะห์สตริง user-agent ตรงไปที่ WhoBrowser บน GitHub เพื่อคว้าเวอร์ชัน PHP ขึ้นอยู่กับการตั้งค่าสภาพแวดล้อม PHP ของคุณ คุณสามารถติดตั้งเป็นแพ็คเกจ Composer - คำแนะนำอยู่ในลิงก์ด้านบน หรือเป็น PHP แบบสแตนด์อโลน ในกรณีที่คุณอยู่ในกลุ่มที่สอง ให้ใส่ไฟล์ bootstrap.php และคุณพร้อมจะไป

ในขณะที่เราประทับเวลาและการปรับปรุง IP จำนวนโค้ดที่เราต้องการนั้นน้อยมาก ThatBrowser จะจัดการกับงานหนัก

function wpr_get_browser_info( $user_agent ) {
  // assuming you don't use Composer, manually include WhichBrowser
  require_once 'whichBrowser-lib/bootstrap.php';
  
  // parse the user agent string
  $browser = new WhichBrowser\Parser( $user_agent );
  
  // grab the type and then the subtype
  // see WhichBrowser for more info
  $tmp = $browser->getType();
  $tmp = explode( ':', $tmp );
  $result['type'] = $tmp[0];
  
  // and the OS and browser name
  $result['os'] = $browser->os->name;
  $result['browser'] = $browser->browser->name;
  
  return $result;
}

ส่งสตริง user-agent ที่บันทึกไว้ไปยัง wpr_get_browser_info() แล้วคุณจะได้ชื่อระบบปฏิบัติการ ชื่อเบราว์เซอร์ และประเภทอุปกรณ์กลับมา วางไว้ในตารางแทนที่สตริง user-agent ดิบ

ตารางใหม่และปรับปรุง

ดูตารางใหม่ของเรา เราทำงานกับข้อมูลเดียวกัน แต่จัดรูปแบบและประมวลผลอย่างถูกต้อง – สำหรับมนุษย์!

การประทับเวลา ประเทศ เมือง เบราว์เซอร์ OS อุปกรณ์ หนังบู๊
20 นาทีที่แล้ว เยอรมนี เบอร์ลิน Firefox อูบุนตู เดสก์ทอป เข้าสู่ระบบ
14 ชั่วโมงที่แล้ว สหรัฐอเมริกา นครฟิลาเดลเฟีย Internet Explorer Windows เดสก์ทอป เข้าสู่ระบบ
7 กันยายน 2018 @ 22:03pm ลัตเวีย ริกา ซาฟารี iOS มือถือ รีเซ็ตรหัสผ่าน
2 กันยายน 2018 @ 02:12pm สหรัฐอเมริกา เบอร์เกนเหนือ Firefox OS X เดสก์ทอป ออกจากระบบ
2 กันยายน 2018 @ 12:33pm n/a n/a โครเมียม Windows เดสก์ทอป เข้าสู่ระบบล้มเหลว

เหลือบมองที่โต๊ะเก่าอีกครั้งเพื่อดูว่ามันแย่แค่ไหน โปรดจำไว้ว่า – การออกแบบยังคงเหมือนเดิม! เราไม่ได้ปรับแบบอักษร สี หรือภาพใดๆ – แค่ข้อมูลเท่านั้น! ยิ่งกว่านั้นด้วยโค้ดเพียงไม่กี่บรรทัด

เราได้เรียนรู้อะไรบ้าง?

เราได้เรียนรู้ว่า GUI ที่ "ออกแบบโดยนักพัฒนา" มักจะไม่สนุกในการดูหรือใช้งาน การทำงานที่ยอดเยี่ยมและหนักหน่วงอื่น ๆ ทั้งหมดที่เราทุ่มเทลงไปนั้นไร้ประโยชน์หากในแวบแรกแอปของเราดูเหมือนไร้สาระ แม้ว่าฉันจะห่างไกลจากนักออกแบบและไม่สามารถให้คำแนะนำใดๆ เกี่ยวกับการออกแบบ GUI ได้ตลอดหลายปีที่ผ่านมา ฉันได้เรียนรู้วิธีการทำให้ข้อมูลที่น่าเบื่อดูน่าสนใจและใช้งานง่ายขึ้น IP Geolocation, ThatBrowser และเครื่องมือที่คล้ายกันสามารถช่วยให้คุณโดดเด่นกว่าใครด้วยโค้ดเพียงไม่กี่บรรทัด ดังนั้นใช้มัน!

รู้จัก #dev หรือสองคนที่สร้าง #GUIs ของตัวเอง (ไม่ดี) อย่างต่อเนื่อง? ต่อไปนี้คือเคล็ดลับบางประการเกี่ยวกับการใช้ GeoIP เพื่อเปลี่ยนข้อมูลที่น่าเบื่อและ GUI ให้กลายเป็นข้อมูลที่น่าสนใจ

คลิกเพื่อทวีต