מחלקה של תקשורת עם ימות API

מאזין נלהב
הודעות: 368
הצטרף: 00:01 29/07/2016
מיקום: ארץ ישראל

מחלקה של תקשורת עם ימות API

שליחהעל ידי מאזין נלהב » 19:08 07/01/2018

לתועלת הציבור, מצורפת מחלקה שמתקשרת עם ימות בAPI בקלות.
(לצורך עבודה תקינה של המחלקה צורפו עוד כמה מחלקות עזר.)

לדוגמא:

קוד: בחירת הכל

/*================יצירת אובייקט(מופע) חדש====================*/

$con = new connecting_to_yemot_api('0773137770', '0000');

/*===============================================================*/


/*================קבלת מספר היחידות====================*/

$a = $con -> connecting('GetSession');

print_r($a);

/*===============================================================*/



/*================הפעלת קמפיין====================*/

$body = array
(
// מספר הקמפיין
'templateId' => '203584',
);

$a = $con -> connecting('RunCampaign', $body);

print_r($a);

/*===============================================================*/


/*================הורדת קובץ====================*/

$body = array
(
// נתיב הקובץ
'path' => 'ivr/ext.ini',
);

$a = $con -> connecting('DownloadFile', $body);

print_r($a);

/*===============================================================*/



/*================העלאת קובץ====================*/

// יצירת הקובץ
$File = new oFile('ext.ini', 'text/plain', 'type=menu');

$body = array
(
'path' => 'ivr/ext.ini',
'convertAudio' => 0,
'fileUpload' => $File
);

$a = $con -> connecting('UploadFile', $body);

print_r($a);

/*===============================================================*/
להלן המחלקה:

קוד: בחירת הכל

class BodyPost
{
// part "multipart/form-data"
public static function PartPost($name, $val)
{
$body = 'Content-Disposition: form-data; name="' . $name . '"';
// check instance of oFile
if($val instanceof oFile)
{
$file = $val->Name();
$mime = $val->Mime();
$cont = $val->Content();

$body .= '; filename="' . $file . '"' . "\r\n";
$body .= 'Content-Type: ' . $mime ."\r\n\r\n";
$body .= $cont."\r\n";
} else $body .= "\r\n\r\n".$val."\r\n";
return $body;
}

public static function Get(array $post, $delimiter = '-------------0123456789')
{
if(is_array($post) && !empty($post))
{
$bool = true;
//foreach($post as $val) if($val instanceof oFile) {$bool = true; break; };
if($bool)
{
$ret = '';
foreach($post as $name=>$val)
$ret .= '--' . $delimiter. "\r\n". self::PartPost($name, $val);
$ret .= "--" . $delimiter . "--\r\n";
} else $ret = http_build_query($post);
} else throw new \Exception('Error input param!');
return $ret;
}
}

class oFile
{
private $name;
private $mime;
private $content;

public function __construct($name, $mime=null, $content=null)
{
if(is_null($content))
{
$info = pathinfo($name);
// check is exist and readable file
if(!empty($info['basename']) && is_readable($name))
{
$this->name = $info['basename'];
// get MIME
$this->mime = mime_content_type($name);
// load file
$content = file_get_contents($name);
if($content!==false)
{
$this->content = $content;
}
else
{
throw new Exception('Don`t get content - "'.$name.'"');
}
}
else
{
throw new Exception('Error param');
}
}
else
{
$this->name = $name;
if(is_null($mime)) $mime = mime_content_type($name);
$this->mime = $mime;
$this->content = $content;
};
}

public function Name() { return $this->name; }

public function Mime() { return $this->mime; }

public function Content() { return $this->content; }

}

class connecting_to_yemot_api
{
public $token;

const URL = 'https://www.call2all.co.il/ym/api/';

public function __construct($user_name, $password)
{
$body = array('username' => $user_name, 'password' => $password);

$body = http_build_query($body);

$opts = array('http' => array(

'method' => 'POST',

'header' => "Content-Type: application/x-www-form-urlencoded",

'content' => $body,

'follow_location' => false) );

$context = stream_context_create($opts);

$url = self::URL.'Login';

$result = file_get_contents($url, FALSE, $context);

$result = json_decode($result);

if($result -> responseStatus == 'OK')
{
$this -> token = $result -> token;

return TRUE;
}
else
{
throw new Exception('שם המשתמש או הסיסמא של המערכת שגויים');
}
}

public function __destruct()
{
$this -> connecting('Logout');
}

public function connecting($action, $body = array())
{
$delimiter = '----'.uniqid();

$body['token'] = $this -> token;

$body = BodyPost::Get($body, $delimiter);

$opts = array('http' =>
array(
'method' => 'POST',
'header' => 'Content-Type: multipart/form-data; boundary='.$delimiter,
'content' => $body,
'follow_location' => false
)
);
$context = stream_context_create($opts);

$url = self::URL.$action;

$result = file_get_contents($url, FALSE, $context);

$headers = $this -> parseHeaders($http_response_header);

if($headers['Content-Type'][0] == 'application/json')
{
return json_decode($result);
}
else
{
return $result;
}
}

private function parseHeaders($headers)
{
// פונקציה שמקבלת מערך של שורות הכותרות
// הפונקציה מפרקת את קבצי הקוקי לתת-מערך נפרד


// מערך הכותרות
$head = array();

foreach( $headers as $k=>$v )
{
$t = explode( ':', $v, 2 );

if( isset( $t[1] ) )
{
if($t[0] == 'Set-Cookie')
{
$CookiesArr = array();

$cookies = explode( ';', $t[1]);

foreach($cookies as $cookie)
{
$c = explode( '=', $cookie);

if( isset( $c[1] ) )
{
$CookiesArr[ trim($c[0]) ] = trim( $c[1] );
}
else
{
$CookiesArr[] = trim( $c[0] );
}
}

$head[ trim($t[0]) ] = $CookiesArr;
}
elseif($t[0] == 'Content-Type')
{
$arr = array();

$children = explode( ';', $t[1]);

foreach($children as $child)
{
$c = explode( '=', $child);

if( isset( $c[1] ) )
{
$arr[ trim($c[0]) ] = trim( $c[1] );
}
else
{
$arr[] = trim( $c[0] );
}
}

$head[ trim($t[0]) ] = $arr;
}
else
{
$head[ trim($t[0]) ] = trim( $t[1] );
}
}
else
{
$head[] = $v;
if( preg_match( "#HTTP/[0-9\.]+\s+([0-9]+)#",$v, $out ) )
{
$head['reponse_code'] = intval($out[1]);
}
}
}
return $head;
}
}

רדיופון
הודעות: 601
הצטרף: 12:35 10/04/2016

Re: מחלקה של תקשורת עם ימות API

שליחהעל ידי רדיופון » 01:50 08/01/2018

תודה רבה! :)

טלפון
הודעות: 167
הצטרף: 22:04 28/03/2017

Re: מחלקה של תקשורת עם ימות API

שליחהעל ידי טלפון » 09:16 08/01/2018

רק תסביר מה זה מחלקה? ולמה זה מיועד?

011371
הודעות: 997
הצטרף: 23:33 07/12/2017

Re: מחלקה של תקשורת עם ימות API

שליחהעל ידי 011371 » 15:52 24/01/2018

למה אתה משתמש עם
file_get_contents

ולא עם
Curl

יש בזה עדיפות?

מאזין נלהב
הודעות: 368
הצטרף: 00:01 29/07/2016
מיקום: ארץ ישראל

Re: מחלקה של תקשורת עם ימות API

שליחהעל ידי מאזין נלהב » 17:08 24/01/2018

למה אתה משתמש עם
file_get_contents

ולא עם
Curl

יש בזה עדיפות?
כן, שCURL צריך להיות מותקן.
וfile_get_contents לא.

011371
הודעות: 997
הצטרף: 23:33 07/12/2017

Re: מחלקה של תקשורת עם ימות API

שליחהעל ידי 011371 » 17:44 24/01/2018

למה אתה משתמש עם
file_get_contents

ולא עם
Curl

יש בזה עדיפות?
כן, שCURL צריך להיות מותקן.
וfile_get_contents לא.
תודה זה בדיוק רציתי לדעת

מנחם מענדל מענדי
הודעות: 980
הצטרף: 16:42 28/04/2016

Re: מחלקה של תקשורת עם ימות API

שליחהעל ידי מנחם מענדל מענדי » 15:32 02/02/2018

הגדרתי את זה בשרת אבל קורה משום מה הוא לא משתלב עם שורה מסויימת ונראה לי זה הpublic function. אשמח שתעזרו לי.תודה
20180202_153100.png
20180202_153100.png (126.22 KiB) נצפה 6308 פעמים
20180202_153437.png
20180202_153437.png (11.86 KiB) נצפה 6308 פעמים

957
הודעות: 31
הצטרף: 10:04 28/07/2017

Re: מחלקה של תקשורת עם ימות API

שליחהעל ידי 957 » 13:38 07/02/2018

יפה מאד!
יש אפשרות לקבל את:
מספר המאזינים כעת
פירוט שיחות פעילות
פירוט שיחות
?

011371
הודעות: 997
הצטרף: 23:33 07/12/2017

Re: מחלקה של תקשורת עם ימות API

שליחהעל ידי 011371 » 15:41 07/02/2018

יפה מאד!
יש אפשרות לקבל את:
מספר המאזינים כעת
פירוט שיחות פעילות
פירוט שיחות
?
דרך ה yemot api זה לא קיים
מחכים שיפתחו
או שמישהו ידריך איך אפשר להתחבר לאתר אם אופציה של curl
(אולי אני לא יודע אבל יש דרך להשתמש ב file_get_contents כאשר צריך לשלוח חלק מהנתונים בPOST ?)
(לגבי פירוט שיחות גם באתר אין אפשר רק להזמין דוח למייל דרך הטלפון, אולי אחרי שנדע איך להתחבר לאתר תוכל דרך cron להריץ כל הזמן את הסקריפט ולאגור לבד את הנתונים… אין לי אחריות על המשאבים והתעבורה שזה יקח...)
נערך לאחרונה על ידי 011371 ב 15:45 07/02/2018, נערך פעם 1 בסך הכל.

BY6199
הודעות: 1635
הצטרף: 13:11 08/01/2017

Re: מחלקה של תקשורת עם ימות API

שליחהעל ידי BY6199 » 15:43 07/02/2018

יפה מאד!
יש אפשרות לקבל את:
מספר המאזינים כעת
פירוט שיחות פעילות
פירוט שיחות
?
דרך ה yemot api זה לא קיים
מחכים שיפתחו
או שמישהו ידריך איך אפשר להתחבר לאתר אם אופציה של curl
(אולי אני לא יודע אבל יש דרך להשתמש ב file_get_contents כאשר צריך לשלוח חלק מהנתונים בPOST ?)
למיטב ידיעתי אפשרי, פירוט שיחות כללי (חודשי) לא.
שיחות פעילות ומספר המאזינים כן.


חזור אל “פורום מפתחים API”

מי מחובר

משתמש הגולש בפורום זה: אין משתמשים רשומים | 1 אורח