Changeset 5758
- Timestamp:
- 08/07/2017 06:02:51 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sites/trunk/browsehappy.com/public_html/functions.php
r2589 r5758 11 11 'long_name' => 'Google Chrome', 12 12 'wikipedia' => 'Google_Chrome', 13 'wikidata' => 'Q777', 13 14 'normalized' => 1, // just first number 14 15 'facebook' => 'googlechrome', … … 20 21 'long_name' => 'Mozilla Firefox', 21 22 'wikipedia' => 'Firefox', 23 'wikidata' => 'Q698', 22 24 'normalized' => 1.5, // include second number if non-zero 23 25 'facebook' => 'Firefox', … … 29 31 'long_name' => 'Apple Safari', 30 32 'wikipedia' => 'Safari', 33 'wikidata' => 'Q35773', 31 34 'normalized' => 1.5, // include second number if non-zero 32 35 'facebook' => false, … … 38 41 'long_name' => 'Opera', 39 42 'wikipedia' => 'Opera', 43 'wikidata' => 'Q41242', 40 44 'normalized' => 1, // just first number 41 45 'facebook' => 'Opera', … … 47 51 'long_name' => 'Microsoft Edge', 48 52 'wikipedia' => 'Microsoft_Edge', 53 'wikidata' => 'Q18698690', 49 54 'normalized' => 1, // just first number 50 55 'facebook' => 'MicrosoftEdge', … … 56 61 'long_name' => 'Microsoft Internet Explorer', 57 62 'wikipedia' => 'Internet_Explorer', 63 'wikidata' => 'Q1575', 58 64 'normalized' => 1, // just first number 59 65 'facebook' => 'internetexplorer', … … 80 86 function browsehappy_fetch_version( $browser, $normalize = true ) { 81 87 82 $fragment = browsehappy_get_browser_data( $browser )->wikipedia; 83 if ( ! $fragment ) 84 return false; 88 $fragment = browsehappy_get_browser_data( $browser )->wikidata; 89 if ( ! $fragment ) { 90 return false; 91 } 85 92 86 93 // Unexpiring transients are autoloaded. We expire these manually on cron instead. 87 94 $stored_version = get_transient( 'browsehappy_version_' . $browser ); 88 95 if ( false !== $stored_version ) { 89 if ( $normalize ) 96 if ( $normalize ) { 90 97 return browsehappy_normalize_version( $browser, $stored_version ); 98 } 91 99 return $stored_version; 92 100 } 93 101 94 $url = 'https://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=php&titles=Template:Latest_stable_software_release/'; 95 $url .= $fragment; 96 97 $response = wp_remote_get( $url ); 98 99 if ( is_wp_error( $response ) ) 100 return false; 101 102 if ( ! $content = wp_remote_retrieve_body( $response ) ) 103 return false; 104 105 if ( ! is_serialized( $content ) ) 106 return false; 107 108 $content = maybe_unserialize( $content ); 109 $page = array_pop( $content['query']['pages'] ); 110 $raw_data = explode( "\n", $page['revisions'][0]['*'] ); 111 112 $version = false; 113 foreach( $raw_data as $data ) { 114 $data = trim( $data, '| ' ); 115 if ( false !== strpos( $data, 'Android' ) || false !== strpos( $data, 'iOS' ) ) 116 continue; 117 if ( false !== strpos( $data, 'Linux' ) && false === strpos( $data, 'Mac OS X' ) && false === strpos( $data, 'Windows' ) && false === strpos( $data, 'Microsoft' ) ) 118 continue; 119 if ( ( false !== $pos = strpos( $data, 'latest_release_version' ) ) || ( false !== $pos = strpos( $data, 'latest release version' ) ) ) { 120 if ( $pos ) 121 $data = substr( $data, $pos ); 122 $version = trim( str_replace( array( 'latest_release_version', 'latest release version', '=' ), '', $data ), '| ' ) . " "; 123 $version = str_replace( "'''Mac OS X''' and '''Microsoft Windows'''<br />", '', $version ); 124 $version = str_replace( "'''Windows 10'''<br>", '', $version ); 125 $version = substr( $version, 0, strpos( $version, ' ' ) ); 126 break; 102 // See https://github.com/WordPress/browsehappy/issues/37 103 $query = " 104 SELECT ?version WHERE { 105 wd:{$fragment} p:P348 [ 106 ps:P348 ?version; 107 pq:P548 wd:Q12355314; 108 wikibase:rank wikibase:PreferredRank 109 ]. 127 110 } 128 } 129 130 if ( false === $version ) 131 return false; 111 LIMIT 1 112 "; 113 114 $request = wp_remote_get( add_query_arg( 115 array( 116 'format' => 'json', 117 'query' => rawurlencode( $query ), 118 ), 119 'https://query.wikidata.org/bigdata/namespace/wdq/sparql' 120 ) ); 121 122 if ( is_wp_error( $request ) ) { 123 return false; 124 } 125 126 $data = json_decode( wp_remote_retrieve_body( $request ) ); 127 128 if ( 129 empty( $data ) || 130 empty( $data->results ) || 131 ! is_array( $data->results->bindings ) || 132 empty( $data->results->bindings[0] ) || 133 empty( $data->results->bindings[0]->version ) || 134 empty( $data->results->bindings[0]->version->value ) 135 ) { 136 return false; 137 } 138 139 $version = $data->results->bindings[0]->version->value; 132 140 133 141 $version = preg_replace( '/[^0-9\.]/', '', $version ); … … 135 143 set_transient( 'browsehappy_version_' . $browser, $version ); 136 144 137 if ( $normalize ) 145 if ( $normalize ) { 138 146 return browsehappy_normalize_version( $browser, $version ); 147 } 139 148 140 149 return $version;
Note: See TracChangeset
for help on using the changeset viewer.