【问题标题】:Trim locale result from Facebook Graph API修剪来自 Facebook Graph API 的语言环境结果
【发布时间】:2012-05-16 23:20:09
【问题描述】:

我正在使用 Facebook Graph API 来获取用户的区域信息(更新代码):

[more code]
<div id="scoreboard-overview">
    <ul>';
    $num_rows = mysql_num_rows($resulttt);
    $i = 0;
        while($row = mysql_fetch_array($resulttt)) {
            $i = $i + 1;
            $fb_data = json_decode(file_get_contents('http://graph.facebook.com/'. $row['fbID']));
            $fb_locale_str = $fb_data->locale;
            $fb_name_str = $fb_data->first_name;
            $fb_country_str = strtolower(substr($fb_locale_str, -2));
            $flag_uri = '/flags/unknown.gif'; //display a general flag if unknown.
            if (!empty($fb_country_str) && in_array($fb_country_str, $valid_flags) )
                $flag_uri = '/flags/' . $fb_country_str . '.gif';

echo '<li>
        <div class="container">
            <div class="black">
                <img src="https://graph.facebook.com/'. $row['fbID'] .'/picture" alt="" />
            </div>
            <div class="grey">
                '.$i.' '.$fb_name_str.'';
            printf ('<div class="test"><img src="%s" /></div>', $flag_uri); 
    echo '      </div>
            <div class="holder">
                <div class="blue">
                    <p>0<br />'. $row['Time'] .'</p>
                </div>
                <div class="red">
                    <img src="http://ep2.nl/images/star.gif" alt="" />
                </div>
                <div class="yellow">
                    <p>'. $row['Score'] .'</p>
                </div>
            </div> 
        </div>
    </li>';
        }
echo '</ul>
</div>
    [more code]

$row['fbID'] 是用户和/或朋友的 Facebook ID(在数组中使用)

这给出的结果如下:en_US 其中en 是用户语言,US 是用户国家。国家就是我追求的地方。

我有几个如下所示的标志图像:us.png。这些标志在适当的情况下使用 ISO3166-1 alpha-2 国家代码命名。所以我想将这个en_US 修剪为us 并将.png 放在它后面,这样我就可以显示标志图像。但是如何做到这一点呢?

如果语言环境不返回任何类似于 unknown.png 的内容,也可以作为一个通用标志。

非常感谢,

莫里斯

【问题讨论】:

    标签: php json facebook-graph-api texttrimming


    【解决方案1】:

    做起来不难。

    试试这个:

    $valid_flags = array ('us', 'ca', 'mx', '...') //You'll need to populate this one
    
    $fb_data = json_decode(file_get_contents('http://graph.facebook.com/'. $row['fbID']);
    $fb_locale_str = $fb_data->location;
    $fb_country_str = strtolower(substr($fb_locale_str, -2));
    $flag_uri = '/flags/unknown.png'; //display a general flag if unknown.
    if (!empty($fb_country_str) && in_array($fb_country_str, $valid_flags) )
        $flag_uri = '/flags/' . $fb_country_str . '.png';
    printf ('<div class="grey"><img src="%s" /></div>', $flag_uri);
    

    请注意,您不应该在 echo 语句中调用 file_get_contents。

    【讨论】:

    • 感谢@cpilko 的回复。我了解您的代码在做什么,它甚至可以检查未知标志。这很棒!谢谢你。我有atm的唯一问题是将它放在我的数组/结果中。如何正确执行此操作?我已经用我的数组的更多代码扩展/更新了我的第一篇文章。希望你能帮我整合这个。另一个问题:为什么我不应该在 echo 语句中调用 file_get_contents ?有一个更好的方法吗?如何?再次感谢您的宝贵时间!
    • 您不在 echo 语句中使用 file_get_contents 的原因是每次调用它时,它都会调用下载该文件。在您更新的示例中,您将进行两次完整的调用以获取相同的数据。
    • 至于放在哪里,$valid_flags 定义应该放在文件的初始化部分。其他所有内容都应该放在您的 while 循环中。
    • 再次感谢@cpilko。不得不做一些调整,但它的工作。我什至添加了$fb_name_str = $fb_data-&gt;first_name; 来获取另一个 JSON 字符串。这是否正确修复了 file_get_contents?我再次更新了代码。如果您有更多建议,请告诉我(除了 printf 部分,我现在只是让它进来以确保它有效)。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    相关资源
    最近更新 更多