ダミー情報を生成する定番.
2024.03.29
ダミー情報を生成する定番を生成する定番のコードを記載します.
Composerを使用し’faker’をインストールします.
composer require fakerphp/faker
使用方法例のコードとしてcsv出力するコードを記載(下記).
<?php
require 'vendor/autoload.php';
use Faker\Factory;
class CsvGenerate{
/**
* ダミー情報を生成する
* @param int $max
* @return string
*/
public function csvMake(int $max=0):string
{
$faker = Factory::create('ja_JP');
$hasData = [];
for($i=0;$i<$max;$i++){
$datas = [];
$datas[0] = $faker->name();
$datas[1] = $faker->email();
$datas[2] = $faker->phoneNumber();
$datas[3] = $faker->address();
$hasData[$i] = implode(',',$datas);
}
return implode(PHP_EOL,$hasData);
}
}
print((new CsvGenerate)->csvMake(1000));
//file_put_contents('data.csv',(new CsvGenerate)->csvMake(1000));
実際使用する場合は、file_put_contents行のコメントを解除してください.
同階層にdata.csvファイルが作成されます.
尚、コマンドよりファイルを実行することを想定しています.
※参考にしたサイト
https://fakerphp.github.io/
https://qiita.com/kurosuke1117/items/c672405ac24b03af2a90
明日へ続く.
著者名 @taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
$datas, $hasData, Address, Composer, create, csvMake, faker’, gt, implode, items, lt, name, phoneNumber, php require, print, qiita.com, string, vendor,
PHP言語でblueskyの自動投稿を作ってみた。
2024.01.12
おはようございます。blueskyの自動投稿を作ってみたくなり即興で作りました。因みにblueskyの開発ドキュメントに記載されていたライブラリを使用しています。トライしてみて案外簡単に作れたのでライブラリに感謝だと感じました🙇。なお、自分のブルースカイアカウントのpost/3khojypfnf62zとpost/3khok6quxgj23が自動投稿(コマンドラインからの投稿)になります。
動作環境・sakuraれんたるサーバー・PHP8.2
作成手順
①アプリのパスワードを作成
https://bsky.app/settings/app-passwords
②potibm/phluesky(v0.3.0)をインストールする(composerのインストールはご自身で調べてください)
composer require potibm/phluesky:"0.3.0"
③php8.2.bluesky.phpと同じ階層にconfig.phpを作成しdefineを設定する。
画像はphp8.2.bluesky.phpと同じ階層に置いているものとします。
USER_NAMEはプロフィールページに記載されている@の後のあかうんと名.bsky.social、 APP_PASSWORDは①で作成したパスワードになります。
④コマンドラインより実行する。なお、vendorの配置などで参照先は変わります。
php php8.2.bluesky.php
<?php
require '../vendor/autoload.php';
require 'config.php';
use \potibm\Bluesky\BlueskyApi;
use \potibm\Bluesky\BlueskyPostService;
use \potibm\Bluesky\Feed\Post;
class bluesky
{
private $api = null;
private $postService = null;
public function __construct()
{
$this->api = new BlueskyApi(USER_NAME, APP_PASSWORD);
$this->postService = new BlueskyPostService($this->api);
}
/**
* 簡単なテキスト投稿
* @param $text
* @return object
*/
public function post($text)
{
$post = Post::create($text);
$response = $this->api->createRecord($post);
return $response;
}
/**
* link付き投稿
* @param $text
* @param $url
* @param $title
* @param $description
* @param $optionalimage|null
* @return object
*/
public function webPost($text,$url,$title,$description,$optionalimage=null)
{
$post = Post::create($text);
$post = $this->postService->addWebsiteCard(
$post,
$url,
$title,
$description,
$optionalimage,
);
$response = $this->api->createRecord($post);
return $response;
}
/**
* 画像投稿
* @param $text
* @param $imgLink
* @param $altText
* @return object
*/
public function imagePost($text, $imgLink, $altText)
{
$post = Post::create($text);
$post = $this->postService->addImage(
$post,
$imgLink,
$altText
);
$response = $this->api->createRecord($post);
return $response;
}
}
if($argv[0]){
try {
var_dump((new bluesky)->post('これはテスト投稿ですよ'));
var_dump((new bluesky)->imagePost('これは画像テスト投稿ですよ','cron.png.webp','クロン'));
} catch (\Throwable $th) {
print $th->getMessage();
//throw $th;
}
}
最後に、cron設定などはご自身で調べてください。
ありがとうございました🙇。
こちらの記事はQiitaで記載されている自分の記事のコピーになります。
https://qiita.com/taoka-toshiaki/items/1508f4e79ea592565cef
明日へ続く。
著者名 @taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
addImage, addWebsiteCard, argv, bluesky, catch, Composer, construct, createRecord, define, getMessage, imagePost, PARAM, phluesky, postService, potibm, potibmBlueskyBlueskyApi, potibmBlueskyBlueskyPostService, print, Throwable, vendor,
ツイッターのDM内容をOpenAI api(chatGPT)で判別しスパムの場合ブロックする。#ソースコード
2023.04.17
おはようございます、スパムをブロックするソースコードを掲載します。ご自由にご使用いただけばと思っています。これを作ったのは先週の日曜日のことです、TwitterのDMに悩まされていたので何か方法はないかなって思って作ったのがこれです。実際、自分は試しに導入してみたのですが、精度はまずまず良い結果でした。因みに自分は作ったのですが今のところ、使ったのは先週の日曜日だけで未だに手動でブロックしています。使わない理由は大量のスパムが来ているわけではないので、特に問題は無いからです。唯、大量のスパムが来ている人にはそれなりにお役に立てるツールかも知れないです。
ツイッターのDM内容をOpenAI api(chatGPT)で判別しスパムの場合ブロックする。
スパム精度は結構良いです。
使用方法
- コマンドで実行
php BlockMessage.php spamcheck
使用したComposerのライブラリ
- TwitterOAuth
- openai-php/client
phpのバージョン
- php8.1
前提条件
- 掲載していないファイルは推測して作ってください。
<?php
require_once "../vendor/autoload.php";
require_once "../tw-config-v2.php";
require_once "../openAI-config.php";
use Abraham\TwitterOAuth\TwitterOAuth;
class BlockMessage
{
var $connection = null;
public function __construct()
{
$this->twitterConnection();
$result = $this->getTwitterDM();
if(!$this->judgmentSpam($result[0])){
$this->setTwitterBlockedUser($result[1]);
}
}
public function twitterConnection()
{
// TwitterOAuthクラスのインスタンスを作成する
$this->connection = new TwitterOAuth(APIKEY, APISECRET, ACCESSTOKEN, ACCESSTOKENSECRET);
// APIバージョンを設定する
$this->connection->setApiVersion('2');
}
/**
* DMを取得する
* @return array
*/
public function getTwitterDM()
{
$dm_events = $this->connection->get('dm_events',["expansions"=>"sender_id","user.fields"=>"username,id"]);
return [$dm_events->data[0]->text,$dm_events->data[0]->sender_id,$dm_events->data[0]->id];
}
/**
* OpenAI APIを使用してスパム判定
* @param string $text
* @return false
*/
public function judgmentSpam(string $text="")
{
if (!$text) return false;
$client = OpenAI::client(OPENAIAPIKEY);
$result = $client->chat()->create([
'model' => 'gpt-3.5-turbo',
'messages' => [
["role"=>"system", "content"=>'Your job is to identify spam, please determine if the message is spam or not. If it is spam, please write "This is spam". For non-spam messages, write "OK".'],
["role"=>"system", "content"=>'respond to in English.'],
['role'=> 'user', 'content' => $text],
]
]);
if(preg_match("/(OK)/i",$result->choices[0]->message->content)){
print "non-spam".PHP_EOL;
return true;
}
if(preg_match("/(spam)/i",$result->choices[0]->message->content)){
print "This is spam".PHP_EOL;
return false;
}
return true;
}
/**
* スパムアカウントをブロック
* @param string $blocked_user_id
* @return false
*/
public function setTwitterBlockedUser(string $blocked_user_id = "")
{
if (!$blocked_user_id) return false;
$block_result = $this->connection->post('users/'.MYTWID.'/blocking', ['target_user_id' => $blocked_user_id], true);
if ($block_result->data->blocking) {
print 'Blocked user successfully.'.PHP_EOL;
return true;
} else {
print 'Failed to block user.'.PHP_EOL;
return false;
}
}
}
if($argv[1]==="spamcheck"){
new BlockMessage();
}
https://github.com/taoka-toshiaki/BlockMessage
著者名 @taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
argv, chat, ChatGPT, choices, Client, Composer, connection, construct, getTwitterDM, messages, OPENAIAPIKEY, print, quot, spam, spamcheck, string, Twitter, twitterConnection, TwitterOAuth, vendor,
dockerとlaravel(ローカルと同期していると遅くなる。)
2022.12.26
おはようございます、先日は雪が降りましたね_(:3」∠)_。今日も寒い日になりそうです☃。
さて、Laravelを勉強して昨日の時点でLaravelの参考書は終盤になっています。月曜日には入門書はコンプリート出来そうです。自分はDockerを使って環境を作っているのですが、Laravelのファイルをローカルに置きDockerで走らせているのですが、どうもブラウザで見る際も常に全ての同期処理がバックグラウンドで走っているらしく、とても表示するのにストレス(遅延)を感じていました。
それを解消する方法はないかと探していた所、@ucan-labさんと@suinさんがヒントを記載していました。下記のヒントから、vendorをローカルに同期しないようにしてDocker内にコピーする方法に変更した所、Qiitaに記載している通り、レスポンスがかなり早くなりました。爆速で表示されるようになりました😲。
docker container cp vendor コンテナ名:/var/www/html/example-app
追伸
vendor及びstorageのframeworkの配下も同じようにすると早くなりますよ。エラーが出るのでパーミッションの777に変更することもお忘れなく!!!!Composerのインストールでエラーが出る場合は下記を叩いてみてください。
mkdir -p storage/framework/cache/data/
mkdir -p storage/framework/app/cache
mkdir -p storage/framework/sessions
mkdir -p storage/framework/views
著者名 @taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
App, cache mkdir, Composer, data, docker, example-app, Framework, Laravel, qiita, sessions mkdir, storage, ucan-labさん, var, vendor, Volume, パーミッション, 爆速, 置きDocker, 追伸, 配下,
phpでソケット受信をする事だけ覚えとけば良い。#php #code
2022.10.27
おはようございます。Socket.ioというサービスをご存知ですか。あれ良いですよね。
さて、Socketとはいう意味は割愛させて頂き、知っていることを前提に話しますとPHPでSocketサーバーは立てれないじゃないかなって今のところ思っています。localhostや0.0.0.0とかならSocketサーバーは立てれるけど、ドメイン有りきでは難しいような気がします。
なので、Socket.ioなんかを使用してnode.jsなんかでサーバーを立てるのが定石かと思います。尚、webSocketのサーバーに対してPHPで送受信は可能です。要するにクライアント側はPHPでも可能ですね。
自分もAPIサーバーに対して常時通信処理を行っています。
PHPライブラリの使用して接続を確立しています、ライブラリはratchetという有名所のライブラリを使用しています。
composer require ratchet/pawl
<?php
require __DIR__ . '/vendor/autoload.php';
\Ratchet\Client\connect('wss://example.com')->then(function($conn) {
$conn->on('message', function($msg) use ($conn) {
echo "Received: {$msg}\n";
$conn->close();
});
$conn->send('Hello World!');
}, function ($e) {
echo "Could not connect: {$e->getMessage()}\n";
});
上記のようなPHPのソースコードで送受信が可能です😋
著者名 @taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
0.0.0.0, API, Code, Composer, io, JS, localhost, node, php, ra, ratchet, require, Socket, webSocket, あれ, クライアント, こと, ご存知, サーバー, サービス, ソケット, ところ, ドメイン, なん, ライブラリ, 事, 今, 使用, 処理, 前提, 割愛, 受信, 可能, 名所, 定石, 常時, 意味, 接続, 有, 気, 確立, 自分, 送受信, 通信,
らくてんのアフィリエイトを記事の下に取り付けるプラグインを作りました。
2021.11.02
らくてんの アフィリエイト を記事の下に取り付けるプラグインを作りました。Composerを使用して楽天のSDKを取ってきているので、そちらをプラグインの中にインストールする必要と アフィリエイト のAPIIDなども必要になりますのでそちらも御自身で構える必要がありますが、それ程難しいことはないプログラムコードだと思います。
あとCSSなどもご自身が使用するサイトのデザインに合わしてご使用ください。今回、WordPressのプラグインですがソースコードを見たいだければ分かる通り、AmzのSDKも取り入れようかなとか思ったのですが、処理が重たくなり表示速度が下がりそうだったので辞めました。因みにAmzのSDKはComposerに公開していないようです。公式サイトからzipでダウンロードするか、githubから入手する方法しかないようですね。
仕様として、タグのワードから商品を検索し表示する方法とショートカットを使用して商品を表示させる方法があります。例えばRakuten_Seller_param type=”search” word=”ひろゆきのシン・未来予測”このようにショートコード書くと下記のように表示されます。また記事の最後に自動で紹介商品も表示されます。
追記:リクエストが多くなるとバグるみたいな‥‥。いまいち下記が表示されていない原因がわからない。
追記:記事の最後に自動で紹介する機能は、このサイトでは一旦停止しています。
[Rakuten_Seller_param type=”search” word=”ひろゆきのシン・未来予測”]
トイウコトデ、WordPressのソースコードになります。
<?php
/*
Plugin Name: Rakuten_Seller
Plugin URI: https://zip358.com/
Description: 楽天アフィリエイトを表示
Author: @zip358com
Version: 0.1
Author URI: https://zip358.com/
*/
require_once plugin_dir_path( __FILE__ ).'/vendor/autoload.php';
define("RAKUTEN_YOUR_APPLICATION_ID","xxxxxxxxxxxxxxx");
define("RAKUTEN_YOUR_AFFILIATE_ID","xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
define("AMAZON_YOUR_ACCESS_KEY_ID","");
define("AMAZON_YOUR_SECRET_KEY","");
define("AMAZON_YOUR_ENDPOINT","");
define("AMAZON_YOUR_URL","");
function Rakuten_Seller_content_plus($content) {
if(is_single()) {
$content.='[Rakuten_Seller_param type="auto"]';
}
return $content;
}
function Rakuten_Seller($params = array()){
$htmlcode = "";
extract(shortcode_atts(array(
'type'=>'',
'word'=>''
), $params));
$client = new RakutenRws_Client();
// アプリID (デベロッパーID) をセットします
$client->setApplicationId(RAKUTEN_YOUR_APPLICATION_ID);
// アフィリエイトID をセットします(任意)
$client->setAffiliateId(RAKUTEN_YOUR_AFFILIATE_ID);
if($type==="auto"){
$tags = get_the_tags();
$htmlcode.= "<div class='rakuten_seller_div'>";
foreach( $tags as $tag) {
$htmlcode.= Rakuten_code($client,$tag->name);
}
$htmlcode.= "</div>";
}elseif($type==="search"){
$htmlcode.= "<div class='rakuten_seller_div'>";
$htmlcode.= Rakuten_code($client,$word);
$htmlcode.= "</div>";
}
return $htmlcode;
}
function Rakuten_code($client,$word="JavaScript"){
$htmlcode = "";
// IchibaItem/Search API から、keyword=$word を検索します
$response = $client->execute('IchibaItemSearch', array(
'keyword' => $word,
'genreInformationFlag' => 1
));
// レスポンスが正しいかを isOk() で確認することができます
$cnt = 0;
if ($response->isOk()) {
foreach ($response as $item) {
$htmlcode.= "<div class='rakuten_seller_item'>".
"<img src='".$item["mediumImageUrls"][0]["imageUrl"]."'>".
"<p>".$item["itemName"]."</p>".
"<a class='rakuten_btn' href='".$item["affiliateUrl"] . "' title='".$item["itemName"]."'><span>楽天で購入"."</span></a></div>";
$htmlcode.= amazon_code($item["isbn"],$item["jan"]);
if($cnt>0){
break;
}
$cnt++;
}
} else {
//echo 'Error:'.$response->getMessage();
}
return $htmlcode;
}
function amazon_code($isbn="",$jan=""){
$htmlcode = "";
return $htmlcode;
}
add_shortcode('Rakuten_Seller_param', 'Rakuten_Seller');
add_filter('the_content', 'Rakuten_Seller_content_plus');
著者名 @taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
Amz, APIID, Composer, css, github, SDK, WordPress, zip, あと, アフィリエイト, インストール, コード, こと, ご自身, サイト, ショート, ソース, そちら, ダウンロード, タグ, デザイン, プラグイン, プログラム, らくてん, ワード, 下, 中, 今回, 仕様, 使用, 入手, 公式, 公開, 処理, 商品, 必要, 方法, 検索, 楽天, 自身, 表示, 記事, 通り, 速度,
Twitterの名前、記号部分を天気予報のアイコン、夜は月のアイコンへと変更する。
2020.11.06
Twitterの名前の特定の記号部分(■や@部分)を天気予報のアイコン、夜は月のアイコンへと変更する。ある有名エンジニアさんのアイディアを拝借して作りました、autoloadとnamespaceの関係で手詰まり、試行錯誤して解決、その次に命名の間違えで手詰まり。そしてファイルの参照で手詰まりしてやっとリリースしました?、長かった。
使用方法はdefineにそれぞれの値をいれてコマンドから定期的に実行すればよいという品物です。Composerでインストールしている環境で下記のコマンドでパッケージをインストールしてください。
パッケージの開発部分は白紙です、今後、この機能に関してはバージョンアップするつもりはないです。
プログラムに改善の余地はありですが、はじめてパッケージ使ったので疲れました?以上、現場からでした。
https://packagist.org/packages/zip358/tw_name_change
https://github.com/zip358/tw_name_change
defineの補足
- OPENWEATHERMAPのAPI_IDが必要です(ユーザー登録が必要です)。
- Twitter API 登録しCONSUMER_KEYなどのキーが必要です。
- Twitterのユーザー名が必要です(自分)。
- KENNOは下記のテーブルを参照ください。
- KIGOUは置き換える文字です。
※正規表現に使われている記号は使用できません。
composer require zip358/tw_name_change
php Twitter_name_change.php
if($argv[0]){
require './vendor/autoload.php';
use zip358\tw_name_change\tw_name_chg;
define("KIGOU","■");
define("KENNO","KENNO");
define("TIME_ZONE","TIME_ZONE");
define("OPENWEATHERMAP_API_ID","Openweathermap_api_id");
define("USER_SCREEN_NAME","user_screen_name");
define("CONSUMER_KEY", "CONSUMER_KEY");
define("CONSUMER_SECRET", "CONSUMER_SECRET");
define("ACCESS_TOKEN", "ACCESS_TOKEN");
define("ACCESS_TOKEN_SECRET", "ACCESS_TOKEN_SECRET");
$tw_name_change = new tw_name_chg();
$tw_name_change->main();
}
KENNO | 県名 |
---|---|
0 | 北海道 |
1 | 青森県 |
2 | 岩手県 |
3 | 宮城県 |
4 | 秋田県 |
5 | 山形県 |
6 | 福島県 |
7 | 茨城県 |
8 | 栃木県 |
9 | 群馬県 |
10 | 埼玉県 |
11 | 千葉県 |
12 | 東京都 |
13 | 神奈川県 |
14 | 新潟県 |
15 | 富山県 |
16 | 石川県 |
17 | 福井県 |
18 | 山梨県 |
19 | 長野県 |
20 | 岐阜県 |
21 | 静岡県 |
22 | 愛知県 |
23 | 三重県 |
24 | 滋賀県 |
25 | 京都府 |
26 | 大阪府 |
27 | 兵庫県 |
28 | 奈良県 |
29 | 和歌山県 |
30 | 鳥取県 |
31 | 島根県 |
32 | 岡山県 |
33 | 広島県 |
34 | 山口県 |
35 | 徳島県 |
36 | 香川県 |
37 | 愛媛県 |
38 | 高知県 |
39 | 福岡県 |
40 | 佐賀県 |
41 | 長崎県 |
42 | 熊本県 |
43 | 大分県 |
44 | 宮崎県 |
45 | 鹿児島県 |
46 | 沖縄県 |
著者名 @taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
autoload, Composer, define, https, namespace, org, packages, packagist, Twitter, zip, アイコン, アイディア, アップ, インストール, エンジニア, コマンド, それぞれ, つもり, バージョン, パッケージ, ファイル, プログラム, リリース, 下記, 予報, 今後, 余地, 使用, 値, 参照, 名前, 命名, 品物, 変更, 夜, 天気, 実行, 拝借, 改善, 方法, 月, 有名, 機能, 次, 特定, 現場, 環境, 白紙, 解決, 記号, 試行錯誤, 部分, 開発, 関係,
ダラダラとLaravel構築してみた解説あり(*´?`*)
2020.06.02
Laravelをインストール手順を動画にしました。いらない手順が含まられていますが・・・。気にしないでください!!
ちなみに適当な動画は無音ですみません。尚、PHPがタイムアウトしてComposerがインストール出来ない場合はポートの解放が出来ているか、IPv6が有効になっていないかなど調べてくだいね。なお、自分の場合、IPv6が有効になっていてダウンロードが出来ない状態でした(´・ω・`)。
お世話になったサイトはこちらです。こちらの手順通り対応しvirtualBOX、いや仮想環境を再起動してあげてください。そうするとすんなりダウンロード出来ます。それでもダウンロード出来ない場合はアドレスからgetcomposer.orgからダウンロードする手段もありますが、恐らくその後のComposerインストールで躓くはずです。サーバー環境を見直すと良いでしょう。
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'e0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1e613307e16318854d24ae64f26d17af3ef0bf7cfb710ca74755a') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
composer create-project laravel/laravel example-app
最後にLaravelのドキュメントのリンクを貼っときますm
https://laravel.com/docs/8.x/installation
著者名 @taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
6, Composer, getcomposer, https, IPv, Laravel, org, php, server-me, virtualBOX, www, アドレス, いね, インストール, お世話, くだ, こちら, サーバー, サイト, タイムアウト, ダウンロード, パス, ポート, 仮想, 再起動, 動画, 場合, 対応, 後, 手段, 手順, 有効, 構築, 気, 無音, 状態, 環境, 自分, 解放, 解説, 適当,
Gさんのリアルタイム検索トレンドを抽出するPHPライブラリ
2020.04.15
Composerをインストールしていること前提条件として書いていきます。まずはライブラリーを入れます。
こんな感じに
composer require x-fran/g-trends
そして次にこんな感じのPHPコードを書きます、これだけでGさん(グーグルさん)のリアルタイム検索トレンドが表示することが可能となります。ちなみにJSONで返す処理として書いています。ライブラリーがしっかりしているので、あとはメソッドを呼び出すだけで簡単に検索のリアルタイムのトレンドが表示できてしまう。
ライブラリーコードは下記から参照できます。
https://github.com/x-fran/g-trends
<?php
include_once "../../vendor/autoload.php";
use XFran\GTrends\GTrends;
$options = [
'hl' => 'ja-JP',
'tz' => -540,
'geo' => 'JP',
];
if((int)$_POST["p"]==1234){
$gt = new GTrends($options);
$ret = $gt->getRealTimeSearchTrends();
if(is_array($ret["storySummaries"]["trendingStories"])){
$jsn = json_encode($ret["storySummaries"]["trendingStories"]);
print $jsn;
}
}
尚、ajaxで表示している部分は割愛します。
https://zip358.com/tool/demo14/ demo14を検証ください。
著者名 @taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
autoload, com, Composer, g-trends, github, GTrends, https, include, json, lt, once, options, php, quot, require, use, vendor, x-fran, XFran, あと, インストール, グーグル, コード, こと, これだけ, トレンド, メソッド, ライブラリ, ライブラリー, リアルタイム, 下記, 処理, 前提, 参照, 可能, 感じ, 抽出, 条件, 検索, 簡単, 表示,
WEBお問い合わせフォームのお値段はいったい幾ら?
2020.01.17
WEBお問い合わせフォームのお値段はいったい幾らなのか?
堀江貴文氏はデジタルの値段は限りなくゼロに近くなると言っていたけど、無料のWEB申し込みフォームやお問い合わせフォームはある。自分もお問い合わせフォームの簡易的な物を作ってみましたのでファイルをアップしますね。
テンプレートエンジンとしてtwig3.0を使用しています、そのため動作環境はPHP7.2以上になります。ソースコードの可変は行って構いません、またこのソースコードの動作保証などは致しません。WEB担当者様が確認を行いバグ等があれば修正を行ってください。
尚、Composerでtwigをインストール済みという事が前提となります。また送信部分やエラー処理についてはご自身で機能の追加が必要となります。
サンプルページ
https://zip358.com/tool/request/
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>お問い合わせ</title>
<script src="https://code.jquery.com/jquery-3.4.1.min.js"
integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"
integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"
integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"
crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"
integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6"
crossorigin="anonymous"></script>
<script src="js/common.js"></script>
<style>
.jumbotron {
background-color: #2bd4d0;
color: #fff;
}
.btn-primary {
color: #fff;
background-color: #2bd4d0 !important;
border-color: #2bd4d0 !important;
}
.input-group-text {
background-color: #2bd4d0;
border: 1px solid #2bd4d0;
}
</style>
</head>
<body>
<div class="jumbotron jumbotron-fluid">
<div class="container">
<h1 class="display-4">お問い合わせ</h1>
<p class="lead">必須項目を入力し送信ボタンを押してください。<br>DEMOのため送信はできません</p>
</div>
<div class="alert alert-warning" id="error_sendmail" role="alert">
</div>
</div>
<form action="index.php" method="POST">
<div class="container">
<div class="row">
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text">お名前[必須]</span>
</div>
<input type="text" name="name" class="form-control" id="name" placeholder="name" value="{{name}}">
</div>
<div class="alert alert-warning" id="error_name" role="alert">
</div>
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text">メールアドレス[必須]</span>
</div>
<input type="email" name="email" class="form-control" id="email" placeholder="name@example.com"
value="{{email}}">
</div>
<div class="alert alert-warning" id="error_email" role="alert">
</div>
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text" id="basic-addon1">@</span>
</div>
<input type="text" name="twitter_account" class="form-control" placeholder="twitter account"
aria-label="twitter account" aria-describedby="basic-addon1" value="{{twitter_account}}">
</div>
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text">お問い合わせ内容[必須]</span>
</div>
<select name="meun" class="form-control" id="exampleFormControlSelect1">
{% for selectop in meun_option %}
<option value="{{selectop.value}}" {{ selectop.value == selectoped ? " selected":"" }}>
{{selectop.name}}</option>
{% endfor %}
</select>
</div>
<div class="alert alert-warning" id="error_meun" role="alert">
</div>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">コメント[必須]</span>
</div>
<textarea name="comment" rows="10" class="form-control" aria-label="コメント">{{comment}}</textarea>
</div>
</div>
<div class="row">
<footer class="blockquote-footer">
<small class="text-muted">
ご自由に記入ください。
</small>
</footer>
</div>
<div class="alert alert-warning" id="error_comment" role="alert">
</div>
<button type="submit" class="mt-2 btn btn-primary btn-lg btn-block">送信する</button>
</div>
</form>
</body>
</html>
<?php
session_start();
require __DIR__ . '/vendor/autoload.php';
use Twig\Environment;
use Twig\Loader\FilesystemLoader;
$loader = new FilesystemLoader(__DIR__.'/templates');
$twig = new Environment($loader);
$meun_option = json_decode(file_get_contents("js/select.json"));
$form = ["name","email","twitter_account","meun","comment"];
$data = [];
if($_POST){
foreach($_POST as $key=>$val){
$_SESSION[$key] = strip_tags($val);
}
}
if($_SESSION){
foreach($_SESSION as $key=>$val){
$_SESSION[$key] = strip_tags($val);
}
}
foreach($form as $key => $val){
$data[$val] = $_SESSION[$val]?$_SESSION[$val]:"";
}
extract($data);
print $twig->render('index.html.twig',["name"=>$name,"email"=>$email,"twitter_account"=>$twitter_account,"selectoped"=>$meun,"comment" => $comment,"meun_option"=>$meun_option]);
著者名 @taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
3.0, 358, 7.2, com, Composer, DOCTYPE, gt, html, https, lt, php, request, tool, Twig, web, www, zip, アップ, インストール, エラー, エンジン, お問い合わせ, コード, ご自身, サンプル, ゼロ, ソース, ため, デジタル, テンプレート, バグ, ファイル, フォーム, ページ, 事, 使用, 保証, 修正, 値段, 処理, 前提, 動作, 堀江貴文, 幾ら, 必要, 担当者, 機能, 無料, 物, 環境, 確認, 簡易的, 自分, 追加, 送信, 部分,
googleスプレッドシートの値を取得することは可能ですが!
2019.11.24
googleスプレッドシートの値を取得することは可能ですが動的な値を取得することは不可能です。
動的処理というのはスプレッドシートの関数などで値を表示している情報をPHPなどで外部取得することは不可能です。
※方法があるようでしたら、教えて頂ければありがたいです。
なお、PHPからスプレッドシートの値などは変更可能です。
今回は値の取得に関しての方法を記載しております。
手順
1.グーグルさんからグーグルスプレッドシートのAPIKEYを取得する。
2. グーグルスプレッドシートを作成しスプレッドシートのID部分を取得する。
3.サーバ上にComposerをインストールし、下記のコマンドを実行する。
composer require google/apiclient:"^2.0"
下記のソースのAPIキー、スプレッドシートIDの部分を取得した値に置き換える。
<?php
require_once __DIR__ . '/vendor/autoload.php';
//$keyFile = __DIR__. "/credentials.json";
define("APIKEY","APIキー");
define("SPID","スプレッドシートID");
$spreadsheetId = SPID;
$range ="Sheet1!A1:B123";
$client = new Google_Client();
$client->setApplicationName("Spreadsheet");
$client->setDeveloperKey(APIKEY);
$scopes = [Google_Service_Sheets::SPREADSHEETS];
$client->setScopes($scopes);
$service = new Google_Service_Sheets($client);
$response = $service->spreadsheets_values->get($spreadsheetId, $range);
// TODO: Change code below to process the `response` object:
echo '<pre>', var_export($response->getValues()), '</pre>', "n";
結構ハシオッタ説明になりますが、こちらでGoogleスプレッドシートの値を取得または操作が可能となります。
著者名 @taoka_toshiaki
※この記事は著者が30代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
1, 2, 2.0, 3, 4, 5, A`, apiclient, APIKEY, com, Composer, et, fCs, Google, https, ID, php, quot, require, watch, www, youtube, インストール, グーグル, こと, コマンド, サーバ, シート, スプレッド, ソース, 下記, 不可能, 今回, 作成, 値, 処理, 取得, 可能, 変更, 外部, 実行, 情報, 手順, 方法, 表示, 記載, 部分, 関数,
ワードプレス過去記事のツイートをボット化する方法。
2019.11.05
WordPress(ワードプレス)の過去記事をツイートしたいけど
結構大変ですと断られる業者は腕なしかもしれない。
簡単に作れます。Composerをインストールして
TwitterOAuthのライブラリー入れてあげて、ワードプレスのwp-load.phpと
TwitterOAuthのライブラリー を参照するような下記コードを作るだけで
ツイートが可能です。
これを自動化するにはcrontab(クロンタブ)という機能で実行できます。
ほとんどのレンタルサーバーにこの機能はついています。
うちのサーバーはWindowsサーバーなんでとかいう場合は
スケジュールでなんとかしてくださいと言えばOKです。
これを実装するのに発生する単価は1万ぐらいじゃないかと思います。
それ以上高ければ、ぼったくられています。
1万円が高いかどうか?
ちなみに普通のプログラマーはこれを構築するのに30分もかからないです。
人件費を考えるとそれぐらいが妥当だと思います。
いまクラウドワークスなどで頼めば5000円以下で対応してくれる人も
いますが、単価が下がるとそれは最終的に自分の首を絞めることに
なります。なので1万円ぐらいが妥当だと思います。
<?php
//ひとつ英語名のフォルダ作って、これいれてあげて
require_once ('../wp-load.php');
require_once ("../vendor/autoload.php");
use AbrahamTwitterOAuthTwitterOAuth;
define("CONSUMER_KEY","コンシューマーキー");
define("CONSUMER_SECRET","コンシューマーシークレット");
define("ACCESS_TOKEN","アクセストークン");
define("ACCESS_TOKEN_SECRET","アクセストークンシークレット");
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
$args = array(
'post_status' => 'publish',
'posts_per_page' => 1,
'orderby' => 'rand'
);
$posts = get_posts($args);
foreach ( $posts as $val ){
$href = get_permalink($val->ID);
$title = get_the_title($val->ID);
$res = $connection->post("statuses/update", array("status" =>$title . " n" . $href . " n#黒歴史ってなんだ? #ブログ ".date('Y/m/d H:i:s')));
}
著者名 @taoka_toshiaki
※この記事は著者が30代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
1, 30, Composer, crontab, OK, php, TwitterOAuth, Windows, WordPress, wp-load, インストール, うち, ぐ, クロン, コード, これ, サーバー, スケジュール, それ, タブ, ツイート, プレス, プログラマー, ボット, ほとんど, ライブラリー, レンタル, ワード, 万, 下記, 人件, 単価, 参照, 可能, 場合, 大変, 実行, 実装, 方法, 普通, 業者, 構築, 機能, 発生, 簡単, 腕, 自動, 記事, 過去,