目次
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>
作成したデモは、こちらです。
プログラムをご希望の方に公開する予定です。
メルマガに登録していただけると、作業の進捗状況など、お知らせします。