• Как использовать метод users.search из ВК?

    tomnolane
    @tomnolane
    профессиональный разработчик
    .xml <- уберите из запроса

    <?php GET_http(String.Format("https://api.vk.com/method/users.search?" + request + "&offset=0&count=1000&fields=photo_id&access_token={0}", Settings1.Default.token)); ?>
    Ответ написан
    Комментировать
  • Как сделать простейшую сео настройку сайта?

    tomnolane
    @tomnolane
    профессиональный разработчик
    1) Заголовки страниц
    2) Ключевики, описания страниц
    3) Подписи к картинка (альт, тайтл)
    4) Быстрая загрузка страниц
    5) Уникальный картинки
    6) Уникальные тексты на сайте
    8) реклама в гугле и яндексе, без этого сейчас очень трудно, говорят что реклама потихоньку убивает все сео.

    (исходник На чём основывается SEO? автор Сергей )
    Где взять уроки по SEO оптимизации?
    Ответ написан
    Комментировать
  • На что ругается PHP?

    tomnolane
    @tomnolane
    профессиональный разработчик
    daniyalov: на хостинге могут быть другие папки(пути) (не /usr/share/php) чем было до этого
    и /var/www/www-root/data/www/domain.com/ajax/sql.php а точнее domain.com напрягает - у вас же не domain.com ведь??
    Ответ написан
  • Как в пхп пишется повторяющаяся функция от даты/времени?

    tomnolane
    @tomnolane
    профессиональный разработчик
    cron
    ставите выполнение 1 раз в день, в php файле пишете то, что нужно сделать. в кроне указываете этот php и всё)
    и не надо ничего проверять)
    Ответ написан
    Комментировать
  • Почему webbrowser теряет ссылку после #?

    tomnolane
    @tomnolane
    профессиональный разработчик
    вот мой код который работает (п.с. ВК ругается на низкие IE версии, и в своё время моё приложение работало на моём компе, но когда поставил на комп сестры (у нас ВИН7, но у меня ИЕ обновлённый (11), у неё нет (8), у неё ВК отказывался запускать - мол старый бразуер... по-этому я использую awesomium вместо стандартного браузера):
    public Form1()
            {
                InitializeComponent();
                 
                webbrowser.BringToFront(); 
                webbrowser.Visible = true;
                string url = "https://oauth.vk.com/authorize?client_id=" + VK_main.ID_APP + "&display=page&redirect_uri=https://oauth.vk.com/blank.html&scope=" + VK_main.SCOPE + "&response_type=token&v=" + VK_main.VERSION; 
                webbrowser.LoadingFrameComplete += Webbrowser_LoadingFrameComplete; //жду окончания загрузки
                webbrowser.Source = new Uri(url);
            }
    
            private void Webbrowser_LoadingFrameComplete(object sender, FrameEventArgs e)
            {
                if (!e.IsMainFrame) return;
    
                if(e.Url.ToString().Contains("https://oauth.vk.com/blank.html#access_token="))
                { 
                    int start = e.Url.Fragment.IndexOf("=");
                    int end = e.Url.Fragment.IndexOf("&");
                    VK_main.TOKEN = e.Url.Fragment.Substring(start+1, end-start-1); // записываю в "глобальную переменную токен
                    webbrowser.LoadingFrameComplete -= Webbrowser_LoadingFrameComplete;
                    webbrowser.Visible = false;
                }
            }


    п.с. проблема может быть в версии IE (по умолчанию webbrowser - использует ядро IE)
    Ответ написан
  • Есть ли способы спарсить facebook?

    tomnolane
    @tomnolane
    профессиональный разработчик
    из личного опыта: на данный момент (не через API) такое сделать (например через один компьютер + аккаунт) невозможно. В лучшем случае капчу будете ловить, а так скорее всего забанят аккаунт (как у меня).
    п.с. фейс использует около 100 000 методов для определения качества поста и куда его пихнуть (в ленте новостей, кому отобразить и т.д.) - и подумайте, сколько они создали методов для того, чтобы (а они ведь категорически против!!!) - чтобы их не спарсили??
    п.с.с. Прокси не поможет.

    возможно есть выход... как например с Instagram - его реверснули (оф. приложение для мобильника) - забрали оф. ID и SECRET приложения - и через него пользуются "закрытым" API (например постинг фото). Мне не интересно таким заниматься (реверснуть оф.приложение facebook для получения их ID и SECRET) ... но это путь возможно сможет вам помочь.

    на счёт инста: я как раз это использую в своём приложении CatPost. Т.е. через комп я могу постить фото в инст. (хотя официально это запрещено)
    Ответ написан
    Комментировать
  • Кто устанавливал kali linux в качестве основной ОС?

    tomnolane
    @tomnolane
    профессиональный разработчик
    у меня стоит в качестве второй ОС (второй основной).
    Много в ней багов?

    Баги... лично не замечал, хотя допускаю что могут быть. К примеру (но тут дело уже не в самом дистрибьютиве, а скорее в Linux) - могут некорректно драйвера установится (и в ручную ставить - не самый удобный способ). А так... (если память не изменяет) kali из (прородитель помимо backtrack) debian, софта много и если debian устраивает в работе (как основная ОС) - то почему бы и нет (kali сделать основной ОС)?
    В целом - очень доволен, хотя не использую каждый день. Пробовал другие дистрибьютивы (mint, whonix, ubuntu) - kali мне больше нра... (т.к. в неё полно того, что нету под windows... нежели в других дистрибьютивах.. но это моё ИМХО)
    Можно ли установить как основную?

    можно (при условии) - если инструменты от туда вам действительно нужны (либо для реального знакомства с ними)
    Ответ написан
    1 комментарий
  • Как написать linq выражение?

    tomnolane
    @tomnolane
    профессиональный разработчик
    string[] input = { "Нет", "20000", "30000", "45000", "50000", "75000" }; int t; const int maxSum = 60000;
    var output = (from f in input where int.TryParse(f, out t) ? t < maxSum : true select f).ToArray();
    Ответ написан
    Комментировать
  • Использование одной переменной несколькими объектами. Как это происходит?

    tomnolane
    @tomnolane
    профессиональный разработчик
    Не понимаю, как в одну переменную записывается 2 разных значения

    People humanoid_1 = new People("Name1"); // humanoid_1 -> переменная раз
                People humanoid_2 = new People("Name2"); // humanoid_2  -> переменная дваз

    тобишь уже две разные переменные типа People.
    Все типы значений являются производными от типа System.ValueType и размещают свое значение в стеке.
    тобишь вы создали две переменны ссылочного типа People. А ссылочные типы хранятся в куче. А при создании объекта ссылочного типа People humanoid_1 = new People("Name1"); в стеке помещается ссылка на адрес в куче.
    Главный тобишь: у вас две кучи)
    Ответ написан
    1 комментарий
  • Что почитать по теме "Электронная цифровая подпись"?

    tomnolane
    @tomnolane
    профессиональный разработчик
    я сейчас занимаюсь аналогичным.
    статья
    статья

    вкратце:
    Простая ЭП. является электронная подпись, которая посредством использования кодов, паролей или иных средств подтверждает факт формирования электронной подписи определенным лицом.

    Неквалифицированная ЭП. Позволяет определить автора подписанного документа и доказать неизменность содержащейся в нем информации. В неквалифицированную электронную подпись заложены криптографические алгоритмы, которые обеспечивают защиту документов. Подписанные документы обладают юридической значимостью при наличии регламентов, устанавливающих правила использования и признания электронных подписей. Такая подпись подойдет для внутреннего и внешнего документооборота и в некоторых случаях участия в электронных торгах.

    Квалифицированная ЭП. Может быть получена только в удостоверяющем центре, аккредитованном Минкомсвязи России, а используемое ПО должно быть сертифицировано ФСБ. Квалифицированная ЭП безусловно наделяет документы всей полнотой юридической силы, и поэтому используется для информационного обмена с органами государственной власти и для участия в электронных торгах.

    в итоге сейчас в свой проект решил использовать услуги СБИС, точнее их API для ЭЦП и документооборота, т.к. у них есть сертификация от ФСБ, да и геморроя меньше при работе с другими контрагентами/компаниями, т.к. собственный алгоритм(механизм проверки/защиты/шифрования) - наверняка не вызовет "доверия" у компаний, когда оборот идет на *миллионов рублей. Т.е. я смотрю на использование процедуры подписания/проверки ЭЦП уже у популярного, акредитованного, сертифицированного (и известного) для всех участников компании/центра (СБИС), нежели самому всё это создавать и потом ещё доказывать, что я (как разработчик) не смогу подделать чужую подпись на договоре и т.д. и т.п.

    п.с. если есть аналоги СБИСа - прошу отписаться

    п.с.с. под c# нашёл API тык, но пока ещё с ним не работал (только собираюсь)
    Ответ написан
    7 комментариев
  • Слишком длинная строка.Как передать большой массив в хранимую процедуру VK API?

    tomnolane
    @tomnolane
    профессиональный разработчик
    вот как я отправляю через post
    // сам post
    public async Task<string> POST(string url, NameValueCollection nvc = null)
            {
                try
                {
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                    request.Method = WebRequestMethods.Http.Post;
                    request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0";
                    request.AllowAutoRedirect = true;
                    request.ProtocolVersion = HttpVersion.Version11;
                    request.AllowWriteStreamBuffering = true;
                    request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
                    string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
                    request.ContentType = "multipart/form-data; boundary=" + boundary; 
                    request.Headers.Add("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3");
                    request.Headers.Add("Accept-Encoding", "gzip, deflate");
                    request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; 
    
                    if (nvc != null)
                    {
                        Stream rs = request.GetRequestStream();
    
                        byte[] boundarybytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
                        string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
                        string _key = String.Empty;
                        foreach (string key in nvc.Keys)
                        {
                            rs.Write(boundarybytes, 0, boundarybytes.Length);
                            string formitem = string.Format(formdataTemplate, key, nvc[key]);
                            byte[] formitembytes = Encoding.UTF8.GetBytes(formitem);
                            rs.Write(formitembytes, 0, formitembytes.Length);
                        }
                        rs.Write(boundarybytes, 0, boundarybytes.Length);
                    } 
    
                    return await Task.Run(() =>
                    {
                        string resp = RESPONSE(request);
                        return resp;
                    });
                }
                catch (Exception ex)
                {
                    return ex.Message;
                }
            }
    //  post обращается к  ответу
     public string RESPONSE(HttpWebRequest request)
            {
                try
                {
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    string answer = "";
                    var headers = response.Headers.ToString();
    
                    if (Convert.ToInt32(response.StatusCode) == 302 || Convert.ToInt32(response.StatusCode) == 200)
                    {
                        using (Stream rspStm = response.GetResponseStream())
                        {
                            using (StreamReader reader = new StreamReader(rspStm, Encoding.UTF8, true))
                            {
                                answer = String.Empty; answer = reader.ReadToEnd();
                            }
                        } 
                        return answer;
                    }
                    else
                    {
                        response.Close(); return WebUtility.HtmlDecode(response.StatusDescription);
                    }
                }
                catch (Exception ex)
                {
                    return WebUtility.HtmlDecode(ex.Message);
                }
            }
    
    //после этого сам  код: (на примере wall.get)
    public async System.Threading.Tasks.Task<bool> GetWall(int id_group, int offset = 0)
            {
                try
                {
                    string url = "https://api.vk.com/method/wall.get?";
                    Main_Tools mt = new Main_Tools();
    
                    // вот что вам надо: создать коллекцию и передать в post (и добавлять/заполнять через for || foreach для вашего случая
    
                    NameValueCollection nvc = new NameValueCollection();
                    nvc.Add("access_token", VK_main.TOKEN);
                    nvc.Add("owner_id", id_group.ToString());
                    nvc.Add("count", "1");
                    if(offset != 0) nvc.Add("offset", offset.ToString());
                    nvc.Add("filter", "owner"); 
                    nvc.Add("v", VK_main.VERSION);
                    
                    // добавляете сколько вам нужно параметров и передаёте в метод POST вторым аргументом
    
                    string t = await mt.POST(url, nvc);
                   dynamic d = JObject.Parse(t);
                   // и далее разбираете json
    //.. и т.д.
    Ответ написан
    1 комментарий
  • В чем ошибка в обращении к хранимой процедуре vk api?

    tomnolane
    @tomnolane
    профессиональный разработчик
    https://api.vk.com/method/execute.getFriends?&access_token=aaaaaabbbbbbbccccc&users=1,23

    между execute.getFriends?&access_token у вас ?&. Это не правильно. Знак амперсанда уберите из запроса и добавьте "&v=5.63"
    Ответ написан
    1 комментарий
  • Зачем тут тип dynamic?

    tomnolane
    @tomnolane
    профессиональный разработчик
    тип dynamic существует только во время компиляции, но не во время выполнения

    источник
    т.е. после компиляции, компилятор сам его преобразует (если получится) в нужный тип (например в int)
    зачем тип счетчика вообще указывать как dynamic

    я тоже не вижу (никакого) смысла так указывать. Эта точно не та вещь, ради которой ввели саму сущность ( dynamic ). Более рациональное использование - это в JSON объектах и для взаимодействия с .COM
    Ответ написан
    Комментировать
  • Дешевый и удобный хостинг сим карт?

    tomnolane
    @tomnolane
    профессиональный разработчик
    1) Нужно принять смс на европейский номер. Какие есть сервисы, желательно бесплатные?
    2) тык
    3) сам пользовался (когда-то, вроде) этим сервисом (через виртуальный андроид), для регистрации в фейсбук. Правда была одна (и существенная проблема). Многие номера были уже "юзанные" и фейсбук не давал их использовать.
    Ответ написан
    Комментировать
  • Есть ли смысл придумывать сложные пароли?

    tomnolane
    @tomnolane
    профессиональный разработчик
    9dc87212c52d4739bbfe5e664b90a6cb.PNG
    краткий ответ: чем длиннее пароль, тем тяжелее(дольше по времени ломать) взломать/подобрать.
    т.е. пароль fGyr[1 взломают быстрее, чем 1111111111111111 (16 символов) оригинал
    п.с. это если касается "грубой силы" - методом подбора (к примеру в hydra)

    п.с.с. а так, если данные передаются не по защищённой связи (к примеру через протокол http, а не https) - то не важно какой пароль, при MITM - его увидят целиком и полностью

    или нас, рядовых пользователей, взламывать не станут

    цель взлома далеко не всегда является корыстной. Иногда это "развлечение" или даже "тренировка", и кто будет "объектом" не важно (будь то пользователь ВК или почта, или худенький интернет-магазин)

    п.с.с.с. использовать 1111111111111111 конечно не стоит, но хотябы так: 1111111111111111_ms
    Ответ написан
    Комментировать
  • Как избавится от ошибки при загрузки страницы в WebBrowser C#?

    tomnolane
    @tomnolane
    профессиональный разработчик
    тык - раздел "примеры"

    п.с. с IE (webbrowser использует IE как "ядро") - у меня постоянно было полно проблем... т.к. на разных компах (у клиента) могли быть разные версии IE. И что-то работало, что-то нет (например ВК ругается на низкую версию IE). И я решил установить "встроенный" сторонний браузер: awesomium. У него меньше проблем, чем у IE... он будет работать у всех клиентов... не зависимо от ОС (ну я имею ввиду от Win7 и выше) единственное, не очень удобно использовать javascript через него (своеобразно скажем так...). А так я очень доволен и использую ТОЛЬКО его (awesomium).

    upd
    js in awesomium:
    тык
    тык
    Ответ написан
    Комментировать
  • Тематика курсовой работы?

    tomnolane
    @tomnolane
    профессиональный разработчик
    первое, вот -> моя программа CatPost написанная полностью на c# (wpf) которая использует оф. API (в т.ч. и ВК)
    так что - на C# МОЖНО работать с API (да и наверно с любым языком ООП или Функциональным, прототипно-ориентированный и некоторых других видах)
    второе, (простое) приложение для VK на c#: подробная статья

    п.с. на youtube полно видео уроков - как создать (простое) приложение для работы с API VK на C#
    п.с.с. на github тоже можно найти разные и полезные решения/наработки

    насколько это сложно, насколько целесообразно ?

    Просто(гугл/яндекс/ютуб/хабрахабр/тостер в помощь), целесообразно

    Тематика:
    по аналогии Алексей Лебедев -> создать приложение, которые ищет всех в ВК, кто учится в вашем учебном заведении - показать в списке: вместе с имя/фамилия + ава + id + пол (п.с. если память не изменяет, максимум API может за раз показать список первых 5000 юзеров)
    Ответ написан
    1 комментарий
  • Как определить на какой Control было нажатие, если он создан кодом?

    tomnolane
    @tomnolane
    профессиональный разработчик
    вы обращали на объект sender при создания метода Click у кнопки?
    private void button1_Click(object sender, EventArgs e)  
      {
      // тут какой-то код
      }

    так вот, этот sender и есть - та вещь, которая вам нужна, т.е.
    private void label_Click(object sender, EventArgs e)  
      {
        Label lb = sender as Label;
          lb.Content = "какой-то текст";
    // или 
         int x;
        switch((sender as Label).Name)
        { 
              case "label":  x = 0; break; 
              case "label2": x = 1; break; 
              case "label3": x = 2; break; 
              default: x = -1; break; 
        }
      }

    вот и всё) sender - знает тот объект, по которому "кликнули"
    Ответ написан
    1 комментарий
  • Как правильно конвертировть картинку в Base64 для последующего вывода в браузере?

    tomnolane
    @tomnolane
    профессиональный разработчик
    вот мой код:
    Bitmap printscreen = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
    
                Graphics graphics = Graphics.FromImage(printscreen as Image);
    
                graphics.CopyFromScreen(0, 0, 0, 0, printscreen.Size);
    
                var ms = new MemoryStream();
    
                printscreen.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); 
    
                string convertedImg = Convert.ToBase64String(ms.ToArray(), Base64FormattingOptions.None);


    получаю на выходе:
    /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAMABVYDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRV... и т.д.


    вставляю в ручную в браузер (п.с. без пробелов, как у вас
    <img alt="" src="data:image/png;base64,ТУТ_ПРОБЕЛА_У_ВАС CONVERTED_BASE64"/>
    между base64, и CONVERTED_BASE64)

    получаю:
    86911b10be4643f1b42b3ca4172c7a6a.PNG
    а получаю скриншот из Visual Studio
    Ответ написан
    1 комментарий
  • C# книги какие прочитать?

    tomnolane
    @tomnolane
    профессиональный разработчик
    ИМХО: я рекомендую начать с видео курса - так быстрее и проще втянуться в язык и понять его. Не обращайте внимание, что видео не совсем новое - для знакомства с C# вполне достаточно. После того, как посмотрите этот курс + можно парочку других, потом скачайте купите книгу Джеффри Рихтера например эту - и эта будет ваша "библия". Только сразу, после прочтения (или во время) каждой главы - пробуйте сразу всё повторить в Visual Studio 2015/2017

    Вот собственно краткий ответ
    Ответ написан
    2 комментария