+/**
+ * Pull the formatted status ID number from a Twitter status object
+ * returned via JSON from Twitter API.
+ *
+ * Encapsulates checking for the id_str attribute, which is required
+ * to read 64-bit "Snowflake" ID numbers on a 32-bit system -- the
+ * integer id attribute gets corrupted into a double-precision float,
+ * losing a few digits of precision.
+ *
+ * Warning: avoid performing arithmetic or direct comparisons with
+ * this number, as it may get coerced back to a double on 32-bit.
+ *
+ * @param object $status
+ * @param string $field base field name if not 'id'
+ * @return mixed id number as int or string
+ */
+function twitter_id($status, $field='id')
+{
+ $field_str = "{$field}_str";
+ if (isset($status->$field_str)) {
+ // String version of the id -- required on 32-bit systems
+ // since the 64-bit numbers get corrupted as ints.
+ return $status->$field_str;
+ } else {
+ return $status->$field;
+ }
+}
+