페이스 북의 친구 수의 추이, 게시 수의 추이를 API를 사용하지 않고 취득

13013 단어 awkFacebook

개요



facebook 의 친구수나 투고수 등을, API 를 사용하지 않고 취득, 가공한다.

방법


  • facebook의 "Facebook 데이터 다운로드"기능으로 모든 데이터를 다운로드한다.
  • awk 로 넉넉하게 csv 로 가공한다.
  • 스프레드 시트 소프트웨어를 사용하여 그래프를 만들 수 있습니다.

  • 우선 친구 수의 추이를 얻어 본다



    fbdice.sh
    #!/bin/bash
    basedir=/mnt/virya/Downloads/facebook-takeyukikojima
    htmldir=${basedir}/html
    awk -v today=20170131 -f friends.awk ${htmldir}/friends.htm
    # end of file
    

    friends.awk
    BEGIN {
        RS = ">";
        caps["友達"] = "friends";
        caps["Sent Friend Requests"] = "sentRequests";
        caps["友達リクエストを受信しました"] = "recievedRequests";
        caps["Deleted Friend Requests"] = "deletedRequests";
        caps["削除した友達"] = "deleted";
        caps["ファン:"] = "fan";
        caps["Friend Peer Group"] = "group";
        if (today != "") {
            today_year  = substr(today, 1, 4);
            today_month = substr(today, 5, 2);
            today_day   = substr(today, 7, 2);
        }
    }
    
    match($0, /^(.+)<\/h2$/, a) {
        caption = caps[a[1]];
        delete m; m[caption] = 1;
        next;
    }
    
    m["friends"] {
        if (! parseNameAndDay($0)) next;
        piars[name]++;
        from[name] = date;
        next;
    }
    
    m["sentRequests"] {
        if (! match($0, /^(.+) <\/li$/, a)) next;
        name = a[1];
        piars[name]++;
        sent[name]++;
        next;
    }
    
    m["recievedRequests"] {
        if (! parseNameAndDay($0)) next;
        piars[name]++;
        received[name] = date;
        next;
    }
    
    m["deleted"] {
        if (! parseNameAndDay($0)) next;
        piars[name]++;
        deleted[name] = date;
        next;
    }
    
    END {
        OFS = ",";
        for (name in piars) {
            print name, from[name], sent[name], received[name], deleted[name];
        }
    }
    
    function parseNameAndDay(line) {
        if (! match(line, /^(.+) \((.+)\)<\/li$/, a)) return 0;
        name = a[1];
        date = a[2];
        if (date == "今日") {
            date = today_year "/" today_month "/" today_day;
        } else if (match(date, /^(([0-9]+))?([0-9]+)([0-9]+)日$/, d)) {;
            date = (d[2] == "" ? today_year : d[2]) "/" d[3] "/" d[4];
        } else {
            date = "**" date;
        }
        return 1;
    }
    
    # end of file
    

    만들어 본 친구 수 추이 그래프





    그 중 게시 수의 시간 경과에 따른 추이 그래프도

    좋은 웹페이지 즐겨찾기