Building Twitter profile image url with Twitter user id

前端 未结 10 1682
日久生厌
日久生厌 2020-12-04 18:06

Is there any way of building a profile image url with user id or screen name? I store user ids in database but i don\'t want to store profile image url.

edit

相关标签:
10条回答
  • 2020-12-04 18:28

    Well I'm using a tricky way via PHP Dom Parser

    include('simple_html_dom.php');
    $html = file_get_html('http://twitter.com/mnckry');
    $img = array();
    
    foreach($html->find('img.size73') as $e)
        $img[] = $e->src;
    
    foreach($html->find('.profile-header-inner') as $e)
        $img[] = str_replace("')", "", str_replace("url('", "", $e->{'data-background-image'}));
    
    
    
    echo $img[0];//Avatar
    echo "<br>";
    echo end($img);//ProfileBG
    

    This will give you something like this; https://pbs.twimg.com/profile_images/378800000487958092/e04a191de329fcf8d000ca03073ad594_bigger.png

    to get 2 other size; for big version remove, "_bigger" for smaller version replace "_bigger" with "_normal"

    0 讨论(0)
  • 2020-12-04 18:29

    You can get it using the users/show method of the Twitter API -- it does exactly what you described. You give it a the ID or the screen name, and it returns a bunch of data, including profile_image_url.

    0 讨论(0)
  • 2020-12-04 18:30

    As of June 2020, both the accepted answer and avatars.io no longer work. Here are two alternatives:

    unavatar.now.sh

    Unavatar can get pictures from quite a few different places including Twitter. Replace [screen_name] in the URL below with the Twitter username you want.

    <img src="https://unavatar.now.sh/twitter/[screen_name]" />
    

    For example:

    <img src="https://unavatar.now.sh/twitter/jack" width="100" height"100" />

    If the demo above ever stops working, it's probably because unavatar.now.sh is no longer available.

    Unavatar is open source though, so if it does go down, you can deploy it yourself from here — the repo even has "Deploy to Vercel/Heroku" buttons. The code to fetch Twitter avatars specifically is here, so you could also use that as part of your own backend.

    twivatar.glitch.me

    If you want an alternative, you can also use twivatar.glitch.me. Replace [screen_name] in the URL below with the Twitter username you want.

    <img src="https://twivatar.glitch.me/[screen_name]" />
    

    For example:

    <img src="https://twivatar.glitch.me/jack" width="100" height"100" />

    If the demo above ever stops working, it's probably because twivatar.glitch.me is no longer available.

    By the way, I didn't build either of these services, they were both made by other people.

    0 讨论(0)
  • 2020-12-04 18:34

    I found such a solution with C#:

        public string Text_toTextFinder(string text, string Fromhere, string Here)
        {
            int start = text.IndexOf(Fromhere) + Fromhere.Length;
            int finish = text.IndexOf(Here, start);
            return text.Substring(start, finish - start);
        }
        string getPhotoURL(string UserName, string size ="x96")
        {
            using (WebClient client = new WebClient())
            {
                client.Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2";
                string htmlCode = client.DownloadString("https://twitter.com/" + UserName);
                return Text_toTextFinder(Text_toTextFinder(htmlCode, "<td class=\"avatar\">", "</td>"), "src=\"", "\"").Replace("normal",size);
            }
        }
    

    For use:

    MessageBox.Show(getPhotoURL("screen_name")); //size = 96x96
    MessageBox.Show(getPhotoURL("screen_name","normal"));
    MessageBox.Show(getPhotoURL("screen_name","200x200"));
    MessageBox.Show(getPhotoURL("screen_name","400x400"));
    
    0 讨论(0)
  • 2020-12-04 18:39

    Based on the answer by @Cristiana214

    The following PHP snippet can be used to make the https://twitter.com/[screen_name]/profile_image?size=normal trick work on mobile.

    Due to twitters redirect to the mobile version of the site links such as https://twitter.com/[screen_name]/profile_image?size=normal get broken on mobile devices

    So the script gets the redirect response (to the user avatar) extracts the address then redirects the page itself

    if (!isset($_GET['id'])) $_GET['id'] = 'twitter';
    $urlget = curl_init();
    curl_setopt($urlget, CURLOPT_URL, 'https://twitter.com/' . $_GET['id'] . '/profile_image?size=normal'); 
    curl_setopt($urlget, CURLOPT_HEADER, true);
    curl_setopt($urlget, CURLOPT_RETURNTRANSFER, 1); 
    $res = curl_exec($urlget);
    preg_match_all("/location: (.*)/", $res, $found);
    header('Location: ' . $found[1][0]);
    

    So this could be accesses as twitteravatar.php?id=twitter which (at time of writing) reloads to https://pbs.twimg.com/profile_images/767879603977191425/29zfZY6I_normal.jpg

    Not pretty but works.

    0 讨论(0)
  • 2020-12-04 18:40

    There is no way to do that. In fact Twitter doesn't provide a url to do that like facebook does ( https://graph.facebook.com//?fields=picture)

    The issue is report but the status is: 'WontFix', take a look:

    https://code.google.com/p/twitter-api/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Stars%20Type%20Bug%20Status%20Summary%20Opened%20Modified%20Component&groupby=&sort=&id=242#makechanges

    0 讨论(0)
提交回复
热议问题