ตารางผู้ใช้ Facebook FQL ฟิลด์ `เพศ`: จะส่งคืนชาย / หญิงได้อย่างไรแม้ผู้ใช้จะใช้ภาษาที่แตกต่างกัน

สถานการณ์:

แอปพลิเคชัน Facebook ของฉัน ( http://apps.facebook.com/mymagicmirror/ ) จำเป็นต้องตรวจสอบ เพศแล้วสอบถามเพศตรงข้ามหรือชายหรือหญิง

FQL:

SELECT uid, name, pic, sex FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1='.$user_id.') and sex='male'

ปัญหา: เมื่อผู้ใช้ facebook ใช้ภาษาอื่น ฟิลด์ 'เพศ' จะไม่ตรงกับ 'ชาย' และ 'หญิง' อีกต่อไป แทนที่จะพูดเป็นภาษาจีน เพศจะกลายเป็น 男性 / 女性 และ FQL ที่ sex='male' จะให้ผลลัพธ์เป็นศูนย์

มีวิธีแก้ปัญหาใดในการสอบถามเพื่อนชาย / หญิงทั้งหมดแม้ว่าผู้ใช้ facebook จะมีภาษาอื่นที่ไม่ใช่ภาษาอังกฤษหรือไม่?


person Unreality    schedule 20.10.2009    source แหล่งที่มา


คำตอบ (4)


เพิ่มฟังก์ชันใดฟังก์ชันหนึ่งต่อไปนี้ลงในไฟล์ facebookapi_php5_restlib.php ของคุณ:

ฟังก์ชั่นสำหรับ users.getInfo:
จาก: http://forum.developers.facebook.com/viewtopic.php?pid=166745#p166745

public function &users_getInfo_en_US($uids, $fields) {
  return $this->call_method('facebook.users.getInfo',
    array('uids' => $uids, 'fields' => $fields, 'locale' => 'en_US'));
}

จากนั้นคุณสามารถโทร users_getInfo_en_US($user, array('sex'));


ฟังก์ชันสำหรับ FQL:
จากลิงก์ด้านบน แต่ด้วย pid=166866#p166866
อันหนึ่งสำหรับสถานที่ en_US (จากโพสต์ก่อนหน้า) และอีกอันให้คุณส่งผ่านในสถานที่ที่คุณต้องการใช้ ชอบอย่างนั้น:

public function &fql_query_localized($query, $locale) 
{
  return $this->call_method('facebook.fql.query',
    array('query' => $query, 'locale' => $locale));
}

จากนั้นเพียงส่งสตริง 'en_US' สำหรับ $locale

person ma11hew28    schedule 05.02.2010

จาก http://forum.developers.facebook.com/viewtopic.php?pid=174065 :

เพียงส่งตำแหน่งภาษาอังกฤษ (en_US) ไปยังการเรียก API และควรส่งคืนเพศให้คุณเป็นภาษาอังกฤษ (ชาย/หญิง)

คุณอาจพบ http://forum.developers.facebook.com/viewtopic.php?pid=166744 มีประโยชน์

person Richy B.    schedule 20.10.2009
comment
ขออภัย โปรดแก้ไขให้ฉันด้วยหากฉันผิด ลิงก์ที่คุณให้มาช่วยแก้ไข 'รับข้อมูลผู้ใช้' เท่านั้น แต่ไม่ได้แก้ไข FQL.... ดังนั้นการจับคู่กับตำแหน่งที่ sex='ชาย' ยังคงล้มเหลว - person Unreality; 20.10.2009
comment
ฉันเชื่อว่าหากคุณส่งโลแคลไปยังการเรียก API เมื่อทำการเรียก FQL ระบบจะแปลเพศเป็นชาย/หญิงซึ่งจะทำให้ FQL ของคุณทำงานได้ คุณลองแบบนี้แล้วหรือยัง? - person Richy B.; 20.10.2009
comment
จะส่งโลแคลไปยังการเรียก API ระหว่างการโทร FQL ได้อย่างไร คุณช่วยบอกโค้ดตัวอย่างให้ฉันหน่อยได้ไหม ขอบคุณมาก - person Unreality; 21.10.2009

ในกรณีที่มีคนใช้ Facebook AS3 API: เพื่อแก้ไขปัญหานี้ ให้ส่ง "locale" เป็นพารามิเตอร์เพื่อรับข้อมูลเพศโดยใช้ en_US locale:

Facebook.api("/me",getMeHandler, {locale:'en_US'});

สิ่งนี้จะส่งกลับค่าภาษาอังกฤษ "ชาย"/"หญิง" ไม่ใช่ค่าที่แปลเป็นภาษาท้องถิ่น

person Rosty    schedule 10.11.2010

คุณต้องเพิ่ม &locale=en_US ในคำขอ GET หรือ POST ที่ไคลเอ็นต์ API ของคุณส่ง ตัวอย่างเช่น หากคุณใช้ไลบรารีไคลเอนต์ PHP ที่ให้บริการโดย Facebook (เวอร์ชันล่าสุดที่เผยแพร่เมื่อวันที่ 2 พฤศจิกายน) คุณเพียงแค่ต้องแก้ไขฟังก์ชัน post_request ของไฟล์ facebookapi_php5_restlib.php ซึ่งเริ่มต้นที่บรรทัด 3316

แทนที่บรรทัด 3320:

$url_with_get = $this->server_addr . '?' . $get_string;

ด้วยสิ่งนี้:

$url_with_get = $this->server_addr . '?' . $get_string . '&locale=en_US';
person defines    schedule 27.11.2009
comment
ไม่รู้จะบอกคุณอย่างไร ฉันไม่สามารถจำลองปัญหานี้ได้เลย เมื่อฉันสอบถาม ฉันได้รับข้อมูลโดยไม่มีปัญหา - person defines; 05.02.2010
comment
มีการพิมพ์ผิดในตัวอย่าง: แทนที่จะเป็น '&local=en_US' ฉันคิดว่ามันควรจะเป็น '&locale=en_US' - person Eric Schrijver; 24.04.2014