目次
OpenPNEは、オープンソースのSNSで、
レンタルサーバーに無料で設置することができます。
https://www.openpne.jp/
なんといっても、国産!ツイッターやフェイスブックの洋物とは違います。
クローズドなSNSに参加してみたところ、
ユーザーインターフェースが同じような感じだったので、
調べてみたら、OpenPNEでした。
フレンド申請をされたことはありますが、
こちらからフレンド申請したことがありません。
フレンド申請されていない人だけを対象に、フレンド申請するには、
独自のリストを生成する必要がある、と考えました。
IDと名前の一覧リストをエクセルなどに用意して、
フレンド申請した人をチェックしていくようにすれば、
もれなくフレンド申請ができる、と思いました。
フレンド申請ついでに、自分のサイトもアピールしようと思いました。
そこで、「IDと名前」だけを取得するためにはどうするか、考えてみました。
いろいろなシステムでは、
API(アプリケーション プログラミング インターフェース)といって、
データを取得する関数が用意されている場合があります。
「もしかして、OpenPNEもできるのでは?」と思って調べたところ、
やはりできます。
ただ、当然といえば当然ですが、管理者から承認を得る必要があります。
管理者に連絡してまですることでもないので、APIは使わないことにしました。
「表示されたページのソースから取得」が、現実的ですね。
一覧表示できれいに表示されるということは、
規則性をもった表示方法だと考えられます。
実際にソースをみると、tableタグを使っていました。
さらに、trタグにclass="text"とありましたので、
データを絞り込みやすくなっていました。
APIは断念したので、ページごとにデータを取得するしかないです。
これは、しかたがないです。
こつこつページ単位で取得します。
という流れです。
データを解析する方法は、以前も紹介したことがある
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>
作成したデモは、こちらです。
プログラムをご希望の方に公開する予定です。
メルマガに登録していただけると、作業の進捗状況など、お知らせします。