OpenPNEのメンバーリストを取得する

  • このエントリーをはてなブックマークに追加
  • 人気ブログランキング

OpenPNEとは

OpenPNEは、オープンソースのSNSで、

レンタルサーバーに無料で設置することができます。
https://www.openpne.jp/

 

なんといっても、国産!ツイッターやフェイスブックの洋物とは違います。

たまたまOpenPNEのSNSに複数参加

クローズドなSNSに参加してみたところ、

ユーザーインターフェースが同じような感じだったので、

調べてみたら、OpenPNEでした。

メンバーリストを独自に作成したい

フレンド申請をされたことはありますが、

こちらからフレンド申請したことがありません。

 

フレンド申請されていない人だけを対象に、フレンド申請するには、

独自のリストを生成する必要がある、と考えました。

 

IDと名前の一覧リストをエクセルなどに用意して、

フレンド申請した人をチェックしていくようにすれば、

もれなくフレンド申請ができる、と思いました。

 

フレンド申請ついでに、自分のサイトもアピールしようと思いました。

 

そこで、「IDと名前」だけを取得するためにはどうするか、考えてみました。

APIを使ってデータ取得?

いろいろなシステムでは、

API(アプリケーション プログラミング インターフェース)といって、

データを取得する関数が用意されている場合があります。

 

「もしかして、OpenPNEもできるのでは?」と思って調べたところ、

やはりできます。

 

ただ、当然といえば当然ですが、管理者から承認を得る必要があります。

 

管理者に連絡してまですることでもないので、APIは使わないことにしました。

表示されたページのソースから取得

「表示されたページのソースから取得」が、現実的ですね。

 

一覧表示できれいに表示されるということは、

規則性をもった表示方法だと考えられます。

 

実際にソースをみると、tableタグを使っていました。

さらに、trタグにclass="text"とありましたので、

データを絞り込みやすくなっていました。

まとめてごっそり取得できない

APIは断念したので、ページごとにデータを取得するしかないです。

これは、しかたがないです。

 

こつこつページ単位で取得します。

データの取得方法

  1. ページのソースを表示
  2. ソースをコピペ
  3. 実行
  4. 一覧表示
  5. エクセルに一覧をコピペ

 

という流れです。

 

データを解析する方法は、以前も紹介したことがある

JavaライブラリのJsoupライブラリを使用します。

 

jQueryのような使い方で、データから指定のデータを取得することが可能です。

データ取得部分のソース

一覧表示には、なにかと便利なクエリ形式ですが、

取得した情報を保管しておくのに便利です。

 

<cffunction name="getData" access="public" returnType="void" output="no">
    <cfargument name="cid" type="string" required="yes">

    <cfset var qData = QueryNew("id,name,url", "integer,varchar,varchar")>
    <cfset var aHtml = ArrayNew(1)>
    <cfset aHtml     = form.data>

    <cfset jSoupClass = createObject( "java", "org.jsoup.Jsoup" )>

    <cfset dom = jSoupClass.parse(form.data)>
    <cfset TRs = dom.select("tr.text")>

    <cfloop index="idx1" array="#TRs#">
        <cfset TDs = idx1.select("td")>
        <cfloop index="idx2" array="#TDs#">
            <cfset st = StructNew()>
            <cfset tmp = idx2.select("a").attr("href")>
            <!--- 他のOpenPNEのSNSではスラッシュ区切りだった
            <cfset st.id = ListLast(tmp, "id=")>
            --->
            <cfset tmp_id = REMatch("[0-9].*$", tmp)>
            <cfset st.id = tmp_id[1]>

            <cfset tmp = idx2.text()>
            <cfif tmp neq "">
                <cfset st.name = ListDeleteAt(tmp, ListLen(tmp,"("), "(")>

                <cfset QueryAddRow(qData)>
                <cfset QuerySetCell(qData, "id", st.id)>
                <cfset QuerySetCell(qData, "name", st.name)>
                <cfset QuerySetCell(qData, "url", "#form.url##st.id#")>
            </cfif>
        </cfloop>
    </cfloop>

    <cfset request.qData = qData>
</cffunction>

作成したデモ

作成したデモは、こちらです。

今後の予定

プログラムをご希望の方に公開する予定です。

メルマガに登録していただけると、作業の進捗状況など、お知らせします。

  • このエントリーをはてなブックマークに追加
  • 人気ブログランキング
最近の投稿
カテゴリー
タグ
アーカイブ
プロフィール