PHP: How to use the Twitter API's data to convert URLs, mentions, and hastags in tweets to links?

后端 未结 7 755
盖世英雄少女心
盖世英雄少女心 2021-02-05 14:52

I\'m really stumped on how Twitter expects users of its API to convert the plaintext tweets it sends to properly linked HTML.

Here\'s the deal: Twitter\'s JSON API sends

7条回答
  •  遇见更好的自我
    2021-02-05 14:56

    Ok so I needed to do exactly this and I solved it. Here is the function I wrote. https://gist.github.com/3337428

    function parse_message( &$tweet ) {
        if ( !empty($tweet['entities']) ) {
            $replace_index = array();
            $append = array();
            $text = $tweet['text'];
            foreach ($tweet['entities'] as $area => $items) {
                $prefix = false;
                $display = false;
                switch ( $area ) {
                    case 'hashtags':
                        $find   = 'text';
                        $prefix = '#';
                        $url    = 'https://twitter.com/search/?src=hash&q=%23';
                        break;
                    case 'user_mentions':
                        $find   = 'screen_name';
                        $prefix = '@';
                        $url    = 'https://twitter.com/';
                        break;
                    case 'media':
                        $display = 'media_url_https';
                        $href    = 'media_url_https';
                        $size    = 'small';
                        break;
                    case 'urls':
                        $find    = 'url';
                        $display = 'display_url';
                        $url     = "expanded_url";
                        break;
                    default: break;
                }
                foreach ($items as $item) {
                    if ( $area == 'media' ) {
                        // We can display images at the end of the tweet but sizing needs to added all the way to the top.
                        // $append[$item->$display] = "$href}:$size\" />";
                    }else{
                        $msg     = $display ? $prefix.$item->$display : $prefix.$item->$find;
                        $replace = $prefix.$item->$find;
                        $href    = isset($item->$url) ? $item->$url : $url;
                        if (!(strpos($href, 'http') === 0)) $href = "http://".$href;
                        if ( $prefix ) $href .= $item->$find;
                        $with = "$msg";
                        $replace_index[$replace] = $with;
                    }
                }
            }
            foreach ($replace_index as $replace => $with) $tweet['text'] = str_replace($replace,$with,$tweet['text']);
            foreach ($append as $add) $tweet['text'] .= $add;
        }
    }
    

提交回复
热议问题