【PHP】2chat開発スレ【2chを越える】 [無断転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2016/04/23(土) 13:45:28.79ID:???掲示板とチャットを組み合わせたオープンソースのPHPスクリプトです。
名前の由来は2ch+chat
【特徴】
*基本的な面
ユーザー登録は必要だが、匿名
ユーザーは日付の経過や書き込み、荒らしなどでレベルが上下し、このレベルは通報の影響度などに関わる
管理人が不在でも通報が集まった書き込みは自動削除
チャット形式の為、書き込み上限はなく、テンプレはいつでも誰でも編集可能
板はなく、各スレッドはカテゴリを付けられる為、スレッドを探しやすい
単発スレには向かない
*専ブラ
jsを使い専ブラなしで快適に閲覧出来るUIを提供
WEBで見れるため、PC⇔スマホで開いているスレなどを完全同期できる
*API
誰でも使えるAPIを提供(jsonp対応)
2ch互換のAPIも提供
ユーザーはサブパスワードを作る事で、悪意を持った外部サービス管理人によるアカウントの乗っ取りを防ぐ事が出来る
開いているスレなども外部サービス間で同期可能
0461nobodyさん
2016/09/13(火) 20:42:06.83ID:???少しずつ読むとか全く関係ないだろ。
235342 : nobodayさん 2016/09/13(火) 20:12:38.32 ID:???
あいうえお
235343 : nobodayさん 2016/09/13(火) 20:12:38.32 ID:???
かきくけこ
2ch風に表示するとこんな感じになるんだぜ。レス番の桁数が増えすぎて、見た目うっとおしくなりそう
で、レスの仕様がどうなるのかしらんが、2chと同じ本文に埋め込むなら
>>235343
長いな・・手入力だとタイプミスしそうだぜ。
まぁ、気にしすぎかもしれんけど。気づいたから言っただけ。
04621
2016/09/13(火) 20:47:50.41ID:???表示方法は実装によるけど、公式WEBアプリではレス番の表示はしないし、>>nnnnみたいな事しなくてもよくする(PHP版と同じ実装)
あと、仕組み的に全レスでユニークの連番になるから、トピで番号振ってたら飛びまくって意味分からないことになる
0463nobodyさん
2016/09/13(火) 20:50:14.29ID:???>>452で仮にレス番が40万番台としよう。
簡単に6つのレス分>>XXXXXX入力できるか?
見る方としても6桁のレス番はパッと見、人間の限界超えてるな。
0464nobodyさん
2016/09/13(火) 20:52:46.53ID:???だって、ツリー表示みたいな事はやめるんじゃなかったけ??
時系列で表示するなら、どうやって、レス番号表示せずにリプライの関係を示す?
04651
2016/09/13(火) 20:59:34.24ID:???専ブラのポップアップ表示みたいな感じ
0466nobodyさん
2016/09/13(火) 21:11:50.95ID:CJ37alkTそれは本質的にはツリー表示と一緒だから。
で、それやると、>>449に書いたように、レスが誰にも気づかれずに埋もれるんだよ。
例えば、このスレのレス番今は400台だけど、例えば古いレス番10にリプライするよ??
そうしたときに、君の言うツリー表示だと、レス番10に相当するレスをまず遡って表示して、「返信」
ボタンを押さなきゃいけないの??
これだと誰にもレスが気づかれない可能性あるよね。
それとも、逆?、新しいリプライのレスに「返信」ボタンつけるの??
この場合は、わざわざ、ボタン押さないとリプライの関係わからないんだ?
0468nobodyさん
2016/09/13(火) 21:19:02.81ID:???ここは別にホーバーして表示でもいいし、実装次第だったね。すまん。
04691
2016/09/13(火) 21:24:48.22ID:???実物見せながらじゃないと改善難しいだろうし
0470nobodyさん
2016/09/13(火) 21:26:07.83ID:???>>462で「>>nnnn」みたいな事しなくてもよくするといってるのに、
>>467で「>>nnn」と言うボタン押しても
って結局どうする気なのかわからん。
まぁ、君の中でまとまってればいいやww
長々お手数かけました。
04731
2016/09/14(水) 23:01:17.20ID:???Userクラスも少し分離してみます
複雑すぎてAPI作るのが難しそうだったので
0474nobodyさん
2016/09/14(水) 23:09:11.60ID:???04751
2016/09/14(水) 23:14:26.86ID:???04761
2016/09/14(水) 23:44:36.65ID:???API作るか
0477nobodyさん
2016/09/15(木) 01:01:52.06ID:???04781
2016/09/15(木) 01:36:10.83ID:???明日からapi始める
0479nobodyさん
2016/09/15(木) 14:01:33.56ID:???アクセスするから、1GBってどうなんだろう。
だから、さくらの更に上位のプランは高いから他がいいのかもな。
0480nobodyさん
2016/09/15(木) 14:11:15.58ID:0CclNGS2全員がサーバー相当する必要はなく、http://2chat.net/へアクセスしたら
ポート解放して読み書き可能なサーバー相当のPCへつなぐ。
0481nobodyさん
2016/09/15(木) 14:36:15.91ID:???04821
2016/09/15(木) 17:33:36.38ID:???2GB借りる予定
1GBは足りなくなるってどこかで見た
さくらが大手らしいから一応さくらにしようと考えているけど
>>480
P2Pは仕組みよく分からないから今回はなしで
>>481
さくらってプラン変更するのに解約→再契約がいるんだよね?
でも有名サイトも結構さくら多いからな…
04831
2016/09/15(木) 17:38:21.18ID:???0484nobodyさん
2016/09/15(木) 17:56:23.33ID:???あ、2GBで1700円か。勘違いしてた。1GBが1700円と思ってた。
>さくらってプラン変更するのに解約→再契約がいるんだよね?
プラン変更はわからんけど、スケールアップしなくても、新しいプランを契約して、
2つのサーバーをローカルネットで連携させて、スケールアウト見たいな事は
できるんじゃね??WebサーバーとDBのサーバーの2つ仮想サーバーに分けるとか。
0485nobodyさん
2016/09/15(木) 17:59:56.73ID:???(Webサーバー+DBサーバー)とDBサーバーで、DBは分散させてこうかな?
適当。
04861
2016/09/15(木) 18:17:36.93ID:???そんな金ない
04871
2016/09/15(木) 18:22:47.38ID:???04881
2016/09/15(木) 18:23:40.75ID:???0489nobodyさん
2016/09/15(木) 18:27:37.11ID:???2つ借りる状態になるってことはアクセス数増えてくるわけだから、
その間に広告とか貼ってマネタイズするとかそういう計画はないんだ。
そうしてアクセス数の増加とともに広告で金稼いで、サーバー代捻出して
ステップアップしていくと普通に思ってわ。
04901
2016/09/15(木) 18:30:00.02ID:???広告は色々心配があって…
アドセンスとか規約厳しいみたいだし、書き込み内容が酷いとBANされないかなと
アマゾンとかは大丈夫なのだろうか
0491nobodyさん
2016/09/15(木) 18:34:20.53ID:???04921
2016/09/15(木) 18:37:35.26ID:???Googleはアウトらしいけど、他なら大丈夫な所あるかも
04931
2016/09/15(木) 18:41:30.17ID:???ggってみたら審査も緩いらしいし、ここならいけるかも(Googleで落ちた人が使っているらしい)
04941
2016/09/15(木) 18:47:25.42ID:???imgurAPIを利用します
0495nobodyさん
2016/09/15(木) 20:20:39.67ID:???レスの本文に何を許すのか。本文に(Markdownとかによる)HTML入力を許すのか。
それとも、単にPlainなテキストのみ許可するのか・・・
HTML入力許すとブラウザで表示する場合はいいけど、クライアントアプリでの
表示が大変になる・・
04961
2016/09/15(木) 20:24:21.14ID:???クライアントアプリはあまり考えていない。もし作るならElectronとか使ってする
0497nobodyさん
2016/09/15(木) 20:36:32.49ID:???まぁ、そこらへんはすべてのHTMLタグに対応しなくて(できるわけもないし)、
表とかはきつそうだけど、基本的なタグだけ対応すれば、まぁ、でもユーザーが
やりすぎるとブラウザでの表示とクライアントアプリでの表示がかい離しすぎちゃうけど。
04981
2016/09/15(木) 20:43:11.45ID:???WEBブラウザからだと問題ある?
WEBアプリはスマホ対応するけど
あと今調べたらElectronみたいなCordovaって言うのがあるらしい
04991
2016/09/15(木) 20:58:47.06ID:???凄い有能だと思っていたけど流石Google
0500nobodyさん
2016/09/15(木) 21:02:47.89ID:???もちろんWebアプリで可能だと思うし。まぁ、デメリットはブラウザ(JavaScript)で動く分、多少重くなるだろうが。
最低、スレをお気に入りに登録して新着チェックを簡単にできるようにそれぐらいは必要でしょう。
このスレだって、途中で>>1がいなくなって戻ってきたけど、このスレをお気に入りに登録して、
新着チェックできるからこそ、>>1が戻ってきた事に気づけたわけだし。
まぁ、でもスマホとかじゃ2chmateなど専用ブラウザから見てる人圧倒的なんじゃないかな。
2chのスマホ向けのWebページがしょぼすぎて低機能なのもあるけど。
05011
2016/09/15(木) 21:13:55.41ID:???お気に入り機能とか使ったことなかった…
タブ170件以上開いて新着チェックしてた
まあそれは置いておいて、
2chmateは使ったことない(IOSだから)よく分からないが、多分専ブラの機能なら大変だろうけどWEBで実装出来ると思う
専ブラ作るのが大変なのはネイティブでも変わらないし
2chは本当WEBページゴミだよな…多分ajaxとかSPAとかが流行ってなかった事に出来たからだと思うけど
05021
2016/09/15(木) 23:14:57.05ID:???とりあえずPushしました
05031
2016/09/15(木) 23:16:36.60ID:???05041
2016/09/15(木) 23:18:34.33ID:???テストコード1回も書いたことないから何すればいいか分からん。。。
05051
2016/09/15(木) 23:31:09.21ID:???05061
2016/09/15(木) 23:54:14.47ID:???0507nobodyさん
2016/09/16(金) 16:54:03.11ID:???コード補完がまともに動かなったり、->の代わりに.をくせでスペルミスしたりで動かなったり効率悪すぎ。
いちいち、メソッド名忘れると、Webで検索してるわ。
開発環境が悪いのかなぁ・・
Windows上のVisual Studio Codeで作って、仮想マシン上のLinuxにデプロイ・実行してるんだけど。
ということで、.NET Core + ASP.NET Coreに移行中。
とりあえず、開発環境と実行環境分けるとあんまいい感じじゃなさそうなので、
Linux上のVisual Studio Codeでやるわ・・
05081
2016/09/16(金) 16:58:37.39ID:???VSにPHP Tool(クソ高い)入れるかNetBeansおすすめ(そもそもPHPがゴミだけど)
C#ならVS CodeよりVSの無料版の方が絶対良い
0509nobodyさん
2016/09/16(金) 17:28:26.93ID:???勉強目的でいきなりお金払うのわね。NetBeansとかいうのいいんだ。
俺的にはコード補完とかもうちょいまともに効くならPHPという言語でも許容できるけど。
>C#ならVS CodeよりVSの無料版の方が絶対良い
うん。今、それに向けて作業してる。元々、UWPアプリとか作っててVisual Studio 2015使ってるからね。
これ以上、メインマシンをよごしたくなくて、維持でも実行環境(Webサーバー+DBサーバー)は仮想マシン上に構築しようとしてたけど、
Windows上で.NET Core + ASP.NET Coreの開発環境入れてもIISとかインストールされないっぽい(
Kestrelとかいう軽量サーバーがデフォルト?)から、VSにすることにした。
で、データベースだけはLinux上に。
0510nobodyさん
2016/09/16(金) 17:32:57.59ID:???05111
2016/09/16(金) 18:28:33.80ID:???User子クラスに認証関係のチェック不足が大量にあったので修正する
05121
2016/09/16(金) 20:36:37.97ID:???0513nobodyさん
2016/09/16(金) 20:57:06.34ID:???つか、ソース見にくすぎだな。
0514nobodyさん
2016/09/16(金) 21:06:49.13ID:???abstract class HttpApiBase(val tokenFlag:TokenFlag,val strParams:List[String],val intParams:List[String]) extends HttpServlet
Scalaの事よくわからんけど、tokenFlagとかコンストラクタの引数?
継承元のHttpServletってサーブレットコンテナ?がHttpServletのインスタンスを生成して、適切なdoPostとかdoGetとか呼んでくれるんじゃないの?
HttpApiBaseにコンストラクタ引数を宣言してて、だれがこれをセットしてくれるのか??
0515nobodyさん
2016/09/16(金) 21:10:30.17ID:???05161
2016/09/16(金) 21:38:02.32ID:???class Hoge(val i:Int)
は
public class Hoge{
public final int i;
public Hoge(int i){
this.i=i;
}
}
と同じ(実際は内部でgetterが生成されていたりするけど)
かなり短く書ける
05171
2016/09/16(金) 21:44:30.44ID:???javaのHoge<T>はScalaではHoge[T]
Hoge[]はArray[Hoge]
05181
2016/09/16(金) 23:09:55.00ID:???web.xmlがない
05191
2016/09/16(金) 23:11:44.98ID:???hogeFooよりhoge-fooの方がいいのだろうか
0520nobodyさん
2016/09/16(金) 23:42:59.51ID:???hoge/foo/afef
で、HTTPメソッドGETで取得、POSTで挿入、PUTで更新、PATCHで部分更新、DELETEでリソース削除。
05211
2016/09/16(金) 23:48:46.55ID:???POSTとGETは分かりますが、残りは対応面倒と聞きました
全部POSTに統一が一番シンプルでいいかと思ったので、POSTに統一しています
05221
2016/09/16(金) 23:49:26.23ID:???0523nobodyさん
2016/09/16(金) 23:56:47.02ID:???例えば、User自体は削除できないんだから、Userに対してDeleteメソッドは定義する必要はないし。
Scalaとか使う道具にはこだわるが、作りだす物にはこだわりがないのかね?
いきなり全部はできんけど。
つか、せめて、取得系はGETでいくべきだ。全部POSTとか、クソAPI呼ばわりされること間違いなし。
RESTful APIに別に無理してしなくてもいいが、
例えばQiitaのAPIはRESTful APIっぽいし。
https://qiita.com/api/v2/docs
http://wp.tech-style.info/archives/683
05241
2016/09/17(土) 00:03:42.90ID:???なるほど
何か難しそうだけどそういう風なのが普通なのか
あとエラーコードの返し方も考えた方がよさそう
全部jsonで返しているし
05251
2016/09/17(土) 00:04:24.59ID:???0526nobodyさん
2016/09/17(土) 00:05:38.71ID:???https://dev.twitter.com/rest/public
Twitterはそんな感じだけど。パラメータの渡し方は。
05271
2016/09/17(土) 00:06:00.49ID:???0528nobodyさん
2016/09/17(土) 00:06:47.04ID:???JSONで返すんだし統一性がないと俺ならブチ切れる。
0529nobodyさん
2016/09/17(土) 00:09:19.60ID:???更に詳しい情報やメッセージなどをレスポンスのJSONボディで返すのが
普通かな。大手サービスはだいだいこんな感じ。
05301
2016/09/17(土) 00:10:05.25ID:???エラーの詳細はJSONだろうけど、HTTPステータスがエラーでも200 OK返しているからどうなのかなと思って
例えば、「本文が長すぎます」みたいなのは200 OKでいいの?
0531nobodyさん
2016/09/17(土) 00:12:25.56ID:???渡して、RPC的なんだと思う。
05321
2016/09/17(土) 00:12:43.05ID:???大まかなエラー内容はHTTPステータスでいいのか
REST APIで調べたら「セッションなどの状態管理を行わない」って書いてあったけどトークンってこれに含まれる?
何か凄く難しい
05331
2016/09/17(土) 00:14:25.50ID:???twitter参考にしているからこっちがいいのだろうか
何か凄く難しい…
TwitterAPI生では触った事ないから内部でどうなっているか考えた事なかった
0534nobodyさん
2016/09/17(土) 00:16:42.85ID:???それはまずい、それはクライアラント側のエラーだから
ステータスコードは400のBad Requestで、
JSONの方に、本文が長すぎますみたいな感じで。
まぁ、はじめてなんからほどほどでいいけど。
https://tools.ietf.org/html/rfc7231
で、どんなステータスコードあるかサクっと見たほうがいい。
4xx系がクライアント側のエラー
5xx系がサーバー側。例えば、クライアント側のリクエストには問題ないが、
サーバー側で問題発生で処理できないとか。
0536nobodyさん
2016/09/17(土) 00:23:06.98ID:???これって認証がらみのトークンだっけ??
通常は、HTTPのリクエストヘッダにAuthorizationヘッダってあるから
https://tools.ietf.org/html/rfc7235#section-4.2
これで渡してもらうのがふつう。
0537nobodyさん
2016/09/17(土) 00:25:30.64ID:???これをどのサービスを使ってるんだけど。まぁ、さすがに今は覚えることありすぎて
やりすぎかな。
QiitaのAPIもTwitterもFacebookもDropboxもOAuth2だし。みんなこれ使ってる。
05381
2016/09/17(土) 00:28:52.08ID:???OAuthはTwitterで聞いた事はあるけどよく知らない
HTTPってかなり複雑だったんだな…
05391
2016/09/17(土) 00:31:04.56ID:???0540nobodyさん
2016/09/17(土) 00:34:41.55ID:???いろいろ大手のAPIを叩いたし、OAuth2のクライアント側も自分で実装したりしたから、
ここらへんは叩き込まれてるけど。あくまでクライアント側だけだから。
>>507で書いたように今はサーバ側を君と一緒に勉強しようとかなと
ここに居座ってるw
05411
2016/09/17(土) 00:36:51.23ID:???0542nobodyさん
2016/09/17(土) 00:42:23.14ID:43HWDKIQそこだね。見てて思ったんだけど、作り方が水平方向的?なんだよね。
例えば、モデルクラス作るなら、一気に全部モデルクラスを作るみたいな。
これだと、途中で設計まずったときに全部作り直しになるじゃん。
俺なら例えば最初にUserだけのモデル作って、その次は垂直方向にUser用のAPIを作るね。
そうすりゃ、早い段階で問題点に気づけるし、全体像を早い段階で気づける。
05431
2016/09/17(土) 10:10:06.72ID:???クラス間の依存とか考えたら結構難しくて…
0544nobodyさん
2016/09/17(土) 10:34:47.47ID:???05451
2016/09/17(土) 10:41:23.23ID:???ここ全く考えてなかった
05461
2016/09/17(土) 10:55:39.20ID:???・Tokenの仕様変更
・Storageは1トークン1つ
・GET、POSTメソッドを分ける
・HTTPステータスも返す
0547nobodyさん
2016/09/17(土) 14:47:49.39ID:???HTTPSを使わんと。
Let's encrypt!!
05481
2016/09/17(土) 16:02:12.48ID:???サーブレット側でも対応することあるの?
0549nobodyさん
2016/09/17(土) 17:05:10.60ID:???というよりそういう事いいたかったんじゃなくて、HTTPSはサーバー証明書が
必要になるわけだから、サーバー証明書簡単に取れるのか知らないので
そこらへん気をとめておいてねって言いたかった。
05501
2016/09/17(土) 17:13:27.05ID:???05511
2016/09/17(土) 17:16:17.06ID:???http://qiita.com/uasi/items/cfb60588daa18c2ec6f5
05521
2016/09/17(土) 17:29:25.24ID:???とりあえずはリクエストパラメーターでいいか…
0553nobodyさん
2016/09/17(土) 17:38:38.30ID:???で、独自認証なんでしょ??そんだったら、
Authorizationヘッダのフォーマットを自由に決めていいんだって
(HTTPのAuthorizaitionヘッダの形式に違反しないかぎり)。
例えば、Authorization : nch {token}
とか
0554nobodyさん
2016/09/17(土) 17:42:20.58ID:???Authorization: auth-scheme (token68 / auth-params)
ってなってんじゃん。この形式にしたがってフォーマット決めておけばOK。
例えばauth-schemeは「nch」ね(IANAにもちろん登録されてないスキームだけど)。
後はtoken68の形式か。
05551
2016/09/17(土) 17:45:18.34ID:???Authorization : nch (token_id) (token_key)みたいな感じで
0556nobodyさん
2016/09/17(土) 17:46:14.52ID:???Chatwork API は X-ChatWorkToken: トークン ヘッダ
ってなってるように、独自のリクエストヘッダを定義するとか。
X-NChTokenみたいな。
0557nobodyさん
2016/09/17(土) 17:48:34.18ID:???そう。Authorization: BearerとかはOAuth2を使ってるときの仕様であって、
OAuth2使ってないんだから、独自でもOKだと。HTTPの仕様に従ってるかぎり。
0558nobodyさん
2016/09/17(土) 17:51:12.40ID:???厳密にはこうだから、パラメータ2つ渡したいなら
Authorization : nch id=(token_id), key=(token_key)
こんな感じかな。確か,区切りでいいはず。
05591
2016/09/17(土) 17:56:31.37ID:???=の前後とか
解析難しそう
0560nobodyさん
2016/09/17(土) 17:56:43.62ID:???ステータスコード401のUnauthorizedでレスポンス返す。
で、レスポンスのヘッダにWWW-Authenticate : nch
って指定して、nchスキームでの認証が必要ですよって示すのが普通。
0561nobodyさん
2016/09/17(土) 18:00:31.58ID:???auth-param = token BWS "=" BWS ( token / quoted-string )
BWS=Bad White Spaceで仕様上は許可してるけど、推奨しないホワイトスペースだね。
■ このスレッドは過去ログ倉庫に格納されています